13_面向对象高级_枚举

ESP32使用microPython控制240x240彩色屏幕显示中文 王铭东老师详细讲解了讲了关于240x240屏幕的一些基础东西,我这里在原功能的基础上拓展了中文显示的功能,顺带修改了实际操作过程中程序中遇到的一些问题。 阅读详情

枚举

1. 认识枚举

枚举是一种特殊的类。

public class Test {
    public static void main(String[] args) {
        A objX = A.X;
        System.out.println(objX);  // X
    }
}

enum A {
    // 注意,枚举类的第一行必须罗列枚举对象的名称
    X,Y,Z;
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
2. 枚举的特点
  • 枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象。
  • 枚举类的构造器都是私有的(写不写都只能是私有的),因此枚举类对外不能创建对象。
  • 枚举都是最终类,不可以被继承。
  • 枚举类中,从第二行开始可以定义类的其他各种成员。
  • 编译器为枚举类新增了几个方法,并且枚举类都是继承 java.lang.Enum 类的,从 enum 类也会继承到一些方法。
public class Test {
    public static void main(String[] args) {
        // 1. 枚举类的构造器是私有的,它不能对外创建对象
//      A obj = new A();  // 报错

        // 2. 枚举类的第一行都是常量(所以可以直接通过"类名.常量名"直接获取),记住的是枚举类的对象
        A objX = A.X;
        A objY = A.Y;

        // 3. 枚举类为我们提供了一些API
        A[] all = A.values();  // 获取所有的枚举对象
        A objZ = A.valueOf("Z");  // 根据枚举的常量名来获得对应的枚举对象
        System.out.println(objZ.name());  // 输出枚举对象的名称:Z
        System.out.println(objZ.ordinal());  // 输出枚举对象的索引:2

    }
}

enum A {
    X, Y, Z;
}
3. 抽象枚举(扩展)
public class Test {
    public static void main(String[] args) {
        A obj = A.Y;
        obj.run();  // Jack跑步中...

    }
}

enum A {
    // 创建对象X、Y的时候,因为run方法是抽象的,所有对象X、Y无法初始化自己的run方法
    // 因此,我们要调用构造器重写run方法
    X() {
        @Override
        public void run() {

        }
    },
    Y("Jack") {
        @Override
        public void run() {
            System.out.println(getName() + "跑步中...");
        }
    };

    // 抽象的————对象的方法
    public abstract void run();

    private String name;

    // 无参构造器
    A() {
    }

    // 有参构造器
    A(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
4. 枚举实现单例
public class Test {
    public static void main(String[] args) {
        // 通过枚举快速实现单例
        H obj1 = H.OBJ;
        H obj2 = H.OBJ;
        System.out.println(obj1 == obj2);  // true
    }
}

enum H {
    OBJ;
}
5. 枚举常见的应用场景
  • 用来表示一组信息,然后作为参数进行传输

    (选择定义一个个的常量来表示一组信息,并作为参数传输)

  • 参数值不受约束

    (选择定义枚举表示一组信息,并作为参数传输)

  • 代码可读性好,参数值得到了约束,对使用者更友好,建议使用!

案例展示:

public class Test {
    // main方法
    public static void main(String[] args) {
        check(0);  // 检测到为女性用户,将为您推荐xxx
    }

    // check方法
    public static void check(int gender) {
        switch (gender) {
            case Constant.female:
                System.out.println("检测到为女性用户,将为您推荐xxx");
                break;
            case Constant.male:
                System.out.println("检测到为男性用户,将为您推荐yyy");
                break;
        }
    }
}

class Constant {
    // 常量
    public static final int female = 0;
    public static final int male = 1;
}

参照上面的案例,用枚举的方法进行改写,代码如下:

public class Test {
    // main方法
    public static void main(String[] args) {
        check(Constant.male);  // 使用枚举,能够让对方不能乱传参数进来
    }

    // check方法
    public static void check(Constant gender) {
        switch (gender) {
            case male:
                System.out.println("检测到为女性用户,将为您推荐xxx");
                break;
            case female:
                System.out.println("检测到为男性用户,将为您推荐yyy");
                break;
        }
    }
}

enum Constant {
    male, female;
}

荒岛逃生游戏 正负表示逃生方向(正表示向右逃生,负表示向左逃生),绝对值表示战斗力,越左边的数字表示里左边港口越近,逃生方向相同的人永远不会发生决斗。- 如果左逃生者的战斗力大于右逃生者,则左逃生者获胜,减少其战斗力,并将右逃生者出栈。- 处理完所有输入后,统计仍在右逃生者栈和左逃生者栈中的战斗力,即可得到成功逃生的人数。- 如果左逃生者的战斗力小于右逃生者,则右逃生者获胜,减少其战斗力,左逃生者出局。- 向左逃生:从右逃生者栈中取出元素,与当前逃生者进行决斗。- 继续进行决斗,直到没有右逃生者或左逃生者的战斗力用尽。 阅读详情

相关推荐

计算机网络之NAT的解释与实验配置

NAT 静态NAT 动态NAT easy_ip NAT服务器映射

爱学习的JackYang的博客 1916

JAVA复习 面向对象高级编程Day13 枚举注释,异常

枚举类,注释,以及10章的部分练习,异常处理机制

m0_46511996的博客 175

【C#】控制设备管理器中设备的启用/禁用_20220506

通过C#代码实现设备管理器的启用/停止 引入Manamger程序集,查找到所需设备,控制启停

weixin_45475139的博客 4527

Java基础入门13:面向对象高级三(内部类、枚举、泛型)

内部类、枚举、泛型的常见知识点,适合复习

2301_80944764的博客 862

SAP MM委外加工保姆级教程:从BOM配置到MIGO发货的完整避坑指南

本文提供SAP MM模块中委外加工的完整操作指南,涵盖从BOM配置到MIGO发货的全流程。详细解析委外采购和工序委外两种模式,包括主数据配置、采购订单创建及物料移动等关键步骤,帮助用户规避常见错误,提升供应链管理效率。特别适合制造业企业实施SAP外包业务参考。

weixin_26905487的博客 527

【信创-k8s】银河麒麟V10国防版+鲲鹏/飞腾(arm64架构)在线/离线部署k8s1.30+kubesphere

银河麒麟作为国家核高基专项的重要成果,国防版凭借其卓越的安全性和可靠性,已成为军工领域的首选操作系统。之前我们在适配麒麟V4国防版的过程中已发现诸多安全性要求,而麒麟V10国防版在安全防护等级上又达到了更高的级别。本文将主要演示离线部署,因为军工项目基本不会出现联网场景。即使在线,也可以按离线方式部署,且离线部署由于有私有仓库,不会存在镜像获取不到和丢失情况。

jiaworld的博客 730

廖雪峰python学习笔记【13】面向对象高级编程:多重继承、定制类、枚举类、元类

  一、多重继承 1. Java是单一继承,Python是多重继承。 2. 多重继承的好处是避免了复杂庞大的继承链。 3. 多重继承时,提供基本功能的父类作为继承的第一个类,其他类名最好以MinIn结尾,体现出继承关系。 二、定制类 1.__len__方法:类中实现__len__方法后,类的实例能够通过len()函数获取实例的长度(即__len__方法的返回值)。 2. __str_...

HappyMrSpring 382

华硕ROG玩家国度安装Ubuntu双系统避坑指南:安全启动密钥那些事儿

本文详细解析了在华硕ROG玩家国度设备上安装Ubuntu双系统时,如何正确处理BIOS中的安全启动(Secure Boot)与密钥管理,避免常见的引导失败和Windows系统无法启动问题。指南提供了从数据备份、启动盘制作到BIOS精细设置(如将OS Type改为Other OS而非简单关闭Secure Boot)以及分区规划的完整流程,确保两个系统都能稳定共存。

weixin_29219189的博客 754

面向对象高级之 枚举

1.什么是枚举枚举是一种特殊类,关键字enum,(1)枚举的第一行,只能写一些合法的标识符(名称),名称之间用逗号隔开,这些名称,本质是常量,每个常量都会记住枚举的每一个对象。(2)枚举类的构造器都是私有的,写不写都只能是私有的,因此枚举类对外部不能创建对象。(3)枚举都是最终类,不能被继承。(4)枚举类中,从第二行开始,...

weixin_33256071的博客 157

ANSYS Fluent:湍流模型理论与应用

雷诺平均方程(RANS,Reynolds-Averaged Navier-Stokes equations)是湍流建模中最常用的方法。它通过将Navier-Stokes方程中的瞬时速度分解为平均速度和脉动速度,然后对这些方程进行时间平均,从而简化了湍流的计算。RANS方法的关键在于湍流闭合问题的解决,即如何准确地表示脉动速度的统计量。雷诺应力模型(RSM)是一种更高级的湍流模型,它通过求解六个雷诺应力方程来描述湍流的各向异性。RSM模型能够更准确地预测复杂的湍流流动,如旋转流和分离流,但计算成本较高。

kkchenjj的博客 2946

【乐企-业务篇】乐企开票具体代码实现

【代码】【乐企-业务篇】乐企开票具体代码实现。

九七的博客 493

Python进阶丨面向对象高级编程 —— 枚举类

枚举类 . 描述 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合(例如星期,月份) 在没有专门提供枚举类型的时候,一般通过字典或类实现 Color = { ‘Red' : 1, 'Green':2, 'Blue':3, } class Color: Red = 1 Green = 2 Blue = 3 它的隐患在于可以被修改 ...

m0_45198298的博客 184

Openclaw接入大模型API,操作本地windows文件

本文介绍了在WSL2环境下配置OpenClaw使用阿里百炼API的方法。主要内容包括:1)确认WSL2安装完成;2)配置阿里百炼API(需注意Qwen3-Max-Thinking为收费模型);3)提供正确的JSON配置格式示例,强调apiKey必须填写真实值;4)说明配置错误需修改Linux配置文件;5)建议通过询问模型信息验证连接成功。后续将介绍如何切换免费API及本地文件访问功能。

qq_27246521的博客 989

python学习(13)——面向对象高级编程

面向对象高级编程 使用slots 使用property 小结 练习 解题思路 面向对象高级编程 数据封装、继承和多态只是面向对象程序设计中最基础的3个概念。在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能。 我们会讨论多重继承、定制类、元类等概念。(我记得我学过) 使用slots (这个好像没学过) 正常情况下,当我们定义了一个class,创建

Misaka_S的博客 1517

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

第08章_面向对象编程(高级)拓展练习(关键字:static,代码块,关键字:final,抽象类和抽象方法,接口,内部类,枚举类,注解,包装类)

1、银行账户类2、图形类3、数组工具类4、二分查找5、二分查找6、素数

小丁的博客 1252

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

面向对象高级编程

廖雪峰python学习

shelia的专栏 620

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

面向对象:final关键字、单例类、枚举类、抽象类、接口

happyhappy没有句号的笔记

Qianlei1109的博客 517

13.面向对象高级三

类的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类。场景:当一个类的内部,包含了一个完整事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类。

Cris_GR7的博客 116

java枚举详解

在Java中,使用enum关键字来定义枚举类型。枚举类可以包含字段、方法和构造函数,但有一定的限制。枚举(Enum):枚举是一种特殊的数据类型,它用于表示一组固定的常量。枚举在Java中通过enum关键字定义,用于替代传统的常量定义方式(如使用定义的常量)。枚举使得代码更加清晰、类型安全,并易于管理。类(Class):类是面向对象程序设计(OOP)中的基本概念,用于定义对象的模板。类包含了数据(属性)和操作数据的方法,是创建对象的蓝图。类是面向对象编程的基础,通过类的实例化可以创建对象,进而实现各种功能。

2401_83447580的博客 1034

(XWZ)的Python学习笔记Ⅲ——面向对象高级编程

声明:文章基于廖雪峰Python教程 面向对象高级编程

a2011607的博客 502

Java面向对象编程高级部分

类变量,类方法,main方法,代码块,单例模式,抽象类,接口,内部类,枚举,注解,异常,String类。

k942649453的博客 813

第13章 面向对象编程

第13章 面向对象编程 JavaScript是基于原型继承的机制来实现面向对象编程的。例如,对象直接量继承于Object.prototype,函数对象继承于Function.prototype,而prototype对象本身也继承于Object.prototype。每个函数对象在创建时也有一个prototype属性,它的值是一个拥有constructor属性且constructor属性值为该函数的对象。 在JavaScript中,如果类型相同或相近,则可以使用继承来抽象;如果类型不同,而功能相似,则可以使

唯美清泠 736

JAVA面向对象

JAVA面向对象

理想主义的花终将盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 1176

从零学Python:18-面向对象编程应用

面向对象编程对初学者来说不难理解但很难应用,虽然我们为大家总结过面向对象的三步走方法(定义类、创建对象、给对象发消息),但是说起来容易做起来难。大量的编程练习和阅读优质的代码可能是这个阶段最能够帮助到大家的两件事情。接下来我们还是通过经典的案例来剖析面向对象编程的知识,同时也通过这些案例为大家讲解如何运用之前学过的Python知识。 经典案例 案例1:扑克游戏。 说明:简单起见,我们的扑克只有52张牌(没有大小王),游戏需要将52张牌发到4个玩家的手上,每个玩家手上有13张牌,按照黑桃、红.

关注我!带你一路 "狂飙" 到底! 1443

面向对象进阶:包、权限修饰符、抽象类、接口

基于您提供的PPT《面向对象进阶:包、权限修饰符、抽象类、接口》,我将为您撰写一篇博客文章,并在每个要点中附上相关代码示例:---

2302_80084329的博客 826

JavaSE基础知识点记录 08章 面向对象编程(高级)

1、私有化类的构造器2、在类的内部创建枚举类的实例,每一个对象都要实例化,对外暴露这些常量对象3、对象如果有实例变量,也就是枚举类的各种对象,最好为防止被修改也不能随便引用,并且在构造器的初始化// private final 修饰实例变量// 私有化构造器// 用public static final 修饰枚举类的实例public static final Season SPRING = new SPRING("春天","春意盎然");

Crown_Cyan的博客 2164
上一篇: 12_面向对象高级_内部类
下一篇: 14_面向对象高级_泛型
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值