反射调用主方法异常解决

Java中反射机制报错的解决方法 Java反射机制是Java语言的一大特色,它允许程序在运行时动态地获取类的信息、创建对象、调用方法以及访问和修改属性。然而,反射机制的使用也伴随着一系列潜在的问题,如访问权限限制、方法或属性不存在、类型不匹配等,这些问题往往会导致反射调用失败并抛出各种异常。本文将详细介绍Java反射机制中常见的报错类型,并提供相应的解决方法,帮助开发者更好地掌握和运用反射机制。 阅读详情

利用Java反射机制去调用其他类的main方法基于这种情形:

      当程序中的某个类在运行到某处需要去调用其他类的main方法时,如果此程序并不知道此main方法所属类的名称,而只是在程序中接受某一代表此main方法所属类的名称的参数,那么这时候就不能通过“类名.main(String[] args);"这样的方式来完成调用,而需要运用Java的反射机制了,需要编写相关的反射代码来完成对其他类的main方法的调用。

#####

例子:

      有一个类,类名为ReflectTest,设定在其main方法中接受的String数据参数的第一个,即args[0]为所要调用的main方法所属类的类名,则与之相关的反射代码为:

    String startingClassName  =  args[0];

                       

    Method mainMethod  =  Class.forName(startingClassName).getMethod("main", "String[].class");

                       

    mainMethod.invoke(null,  (Object)new String[]{"a", "b", "c"});

    这里解释一下(Object)new String[]{"a", "b", "c"}这段代码。

    启动Java程序的main方法的参数是一个字符串数组,即public static void main(String[] args),通过反射方式来调用这个main方法时,如何为invoke方法设置参数呢?

    按jdk 1.5的语法,由于使用的是可变参数(Object类型),设置的数组参数会被作为一个参数进行传递,而按jdk 1.4的语法,此处应设置一个Object数组,数组中的每个元素对应所调用方法的一个参数。

    当把一个字符串数组作为参数传递给invoke方式时,编译器会兼容jdk 1.4的语法,即按照1.4的语法进行处理,即把字符串数组打散成为若干个单独的参数,这样就会产生参数个数不匹配的异常。

    解决方法:采用上述强制向上转型后,可以是编译器按照正确的方法进行参数处理,即将整个字符串参数作为整体传递给目标main方法。

    注:使用new Object[]{new String[]{"a", "b", "c"}}作为invoke方法的第二个参数也可以得到正确的结果。比如在目标main方法遍历字符串数组元素。

 

java异常、反射与集合 (1)异常(2)error:错误,不能解决递归调用:自己的方法调用自己===》栈溢出:StackOverflowError。 阅读详情

相关推荐

解决Java反射调用权限异常的技巧

然而,使用反射时可能会遇到权限异常,因为默认情况下,Java的安全管理器会限制对私有成员和方法的访问。在本文中,我将介绍一些解决Java反射调用权限异常的方法,并提供相应的源代码示例。最后,我们使用get()方法获取字段的值并打印输出。在checkPermission()方法中,我们检查传入的权限是否为ReflectPermission类型,如果是,则放宽反射调用的限制。在main()方法中,我们通过调用System.setSecurityManager()方法来安装自定义的安全管理器。

FcRuby的博客 509

反射调用目标异常可能原因之一解决java.lang.reflect.InvocationTargetException

今天我在写旅游网的时候,出现web里的servlet出现了反射异常. 具体报错如下: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.refle...

qq625919576的博客 8265

ArcGIS+PLUS+InVEST三件套实战:从零搞定土地利用变化与碳储量预测(附完整数据包)

本文详细介绍了如何整合ArcGIS、PLUS模型和InVEST模型,构建土地利用变化与碳储量预测的完整研究流水线。通过多情景模拟和生态系统服务评估,提供从数据准备到结果验证的实战指南,助力研究者高效完成生态评估项目。

weixin_30399821的博客 543

Android 使用反射调用方法时报错java.lang.reflect.InvocationTargetException的可能原因

Android 使用反射调用方法时报错java.lang.reflect.InvocationTargetException的可能原因: 以我遇到的问题为例,我的项目有时会添加一个jar包,有时没有这个jar包,所以选择反射调用这个jar包里的一个方法。 (方法可能存在,也可能不存在。) 当方法存在时,使用反射调用,报错:java.lang.reflect.InvocationTargetE...

yuzhidao的博客 1万+

华为、Cisco、H3C、中兴网络设备如何配置syslog日志采集

华为、Cisco、H3C、中兴网络设备如何配置syslog日志采集

weixin_40239644的博客 8705

无人机+消防车:高楼灭火系统技术详解

传统的消防设备,如登高车、车载水枪、水炮和高喷车,在50米以上高度的火源面前往往力不从心,100米以上高层火灾则更加依赖消防员“爬楼”灭火,效率低下且风险极高。消防水带:采用聚乙烯丝材质,超轻、耐腐蚀、强度高,能够携带大量水或灭火泡沫进行高空喷水灭火作业。“无人机+消防车”高楼灭火系统主要由消防车和无人机两部分组成,通过机车联动实现高效灭火。高效灭火:无人机能够快速到达高层建筑顶部或指定位置进行灭火作业,大大提高了灭火效率。空压泡沫系统:配备超大水箱,支持长时间供应灭火泡沫,满足无人机灭火剂的需求。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1671

捕获java反射执行方法抛出的异常

一般在业务开发时需要向上层抛异常写法如下:public void A() throws Exception{ throw new Exception(); } public void B(){ try{ A(); }catch(Exception e){ //具体处理异常 } }但是如果是通过反射调用的A方法那么如果直接catch异常类Exception 会返回nu

pluie-cloud的博客 1万+

STM32F103VET6实战:用W25Q64外部Flash实现Bootloader+Application双备份(含完整代码解析)

本文详细介绍了基于STM32F103VET6微控制器和W25Q64外部Flash实现Bootloader+Application双备份固件升级的完整方案。通过精心设计的Flash分区策略、可靠的Bootloader程序以及包含双重校验和自动回滚机制的升级流程,有效解决了远程升级过程中断电导致设备变砖的风险,确保了工业嵌入式系统的高可靠性与稳定性。

linux的博客 823

运用反射机制调用方法时的异常处理

今天在一个有事务的service方法里面,用Java的反射机制调用了一个方法A ,当在方法A中抛出RunTimeException后,service方法里面的事务并没有回滚, 最后发现用Java反射机制调用方法A时抛出了java.lang.reflect.InvocationTargetE...

916

有限元分析必看:如何用ANSYS检查关键区域的网格质量(附操作截图)

本文聚焦有限元分析中决定仿真精度的关键环节,详细讲解了如何利用ANSYS Workbench对关键区域进行网格质量检查与优化。文章提供了从思维转变、实战操作到指标解读的完整流程,强调通过命名选择、Worksheet过滤器等工具实现定向检查,并给出了针对结构分析的关键区域网格质量阈值建议,帮助工程师提升仿真结果的可靠性与效率。

weixin_29200741的博客 466

ControlCAN.dll开发适配USBCAN_E/2E_U设备

摘要:本文提供了USBCAN_E/2E_U设备的配置指南:1)安装专用驱动;2)获取最新的ControlCAN.dll文件;3)修改VCI调用顺序,新增VCI_SetReference函数设置波特率;4)使用工具计算波特率配置值,并给出了常见波特率对应的代码参考值(如500K对应0x060007)。配置过程强调使用特定工具计算精确的波特率参数,并提供了相关软件下载链接。

weixin_43969033的博客 390

java反射调用出错

可能是调用的包路径出错:java.lang.ClassNotFoundException: com.thunisfot.test.FunctionService

chenminghe271的专栏 887

kaggle竞赛平台上数据集下载详解

从kaggle 网站上下载数据集既保证了速度又避免了网络的不稳定造成下载失败问题。该平台也可以上传代码作为自己的代码库,不过本人更习惯将代码上传到github上。希望本人整理的kaggle库使用技巧能够帮助到正在阅读本博客的你。此外还有一篇博客针对kaggle数据集下载问题的几个问题的相关文章进行了整理【博客链接】。

li1784506的博客 2万+

java反射调用带异常的方法_Java反射调用方法时捕获异常

问题描述反射调用方法时,方法内部抛出了自定义异常,但是无法在反射调用的时候捕获到抛出的自定义异常。代码如下:// 自定义异常public class MyException extends Exception {private static final long serialVersionUID = -7998753885990231365L;private String code;public ...

weixin_31040783的博客 1517

VCS NLP 低功耗验证系列(六):功耗分析与优化——SAIF 报告与验证效率提升

本文是VCS NLP低功耗验证系列的第六篇,主要解决功耗数据采集和验证效率优化问题。文章首先介绍了SAIF(Switching Activity Interchange Format)文件在功耗分析中的作用,详细讲解了VCS的Region-Based SAIF功能,包括三个关键系统任务($saif_region_create、$saif_region_exclude、$saif_region_monitor)的使用方法和工程实践建议。接着从编译侧、运行侧和方法学侧三个维度提出了NLP验证效率优化策略,特别强

元直的博客 472

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java 获取反射异常信息_深入分析Java反射(六)-反射调用异常处理

前提Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行Debug。本文主要介绍一个使用反射一定会遇到的问题-反射调用异常处理。反射调用异常处理反射调用出现异常的方法主要考虑下面的情况:属性操作:java.lang.reflect.Field#set(Obj...

weixin_39936086的博客 1068

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

method反射调用后抛出InvocationTargetException异常12

背景 在构建关键字驱动测试框架的时候,明明已经在在方法try/catch并且抛出了自定义异常,但是测试报告中打印错误信息时却是InvocationTargetException。原因是:如果方法中直接抛出异常,通过反射进行调用时,会抛出InvocationTargetException异常 问题场景 自定义的某个关键字方法:(此例中属于KeyWordsActions类) public static void verifyTitle(String text) throws Exception {

m0_50140524的博客 1267

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

深度学习工具包 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")

利用反射调用方法抛出的异常如何被捕获?

我们通常在java开发中采用自定义异常,在业务中遇到非系统错误时抛出自定义异常,并在上层进行捕获,就能知道业务的具体出错信息。这种方法很常用,但是如果采用反射去自动调用某个方法时,却不能捕获到用户自定义的异常。下面用代码来说明:/*** WebException为自定义异常*/ classFoo{publicvoidfun(intn)throwsWebException{...

weixin_30566111的博客 643

解决被反射的类无法被spring管理,空指针异常问题

这是我在开发语音指令识别功能时遇到的问题,在将语音转成文字后需要进行指令匹配,指令匹配成功,就会获得对应的处理方法名称以及所属类,然后通过反射机制去执行该方法完成指令对应的操作此时就抛出了空指针异常,提示我storeOrderService.getOrderNumbers()方法并不存在,也就是依赖并没有注入成功。

蒾酒的博客 2194

反射抛出自定义异常问题

反射抛出自定义异常问题 问题描述 反射调用方法时,方法内部抛出了自定义异常,但是无法在反射调用的时候捕获到抛出的自定义异常。 反射调用方法时,方法再次调用反射抛出自定义异常,导致最底层异常消失。 @Slf4j public abstract class AbstractService implements BaseService<BaseDto> { protected String strategy = "ABS_BUS"; protected static Map&l

MysticalYcc的博客 1591

Java通过反射调用一个类的私有方法

本文转载自:https://www.cnblogs.com/ghq120/p/8439204.html 获得私有方法的流程是 (1)获取目标类 (2)获取目标方法   Method method=clazz.getDeclaredMethod(name);//可以调用类中的所有方法(不包括父类中继承的方法)   Method method=clazz.getMethod(name);//...

样young的博客 3万+

java反射调用带异常的方法_[JAVA]运用反射机制,抛出的异常的捕获方法

背景介绍笔者前些日子做过一个这样的事情,利用反射机制调用一个会报Checked的异常的方法,在调用后没法抛出异常(原因是反射机制调用是没法catch到Checked异常的)。举个简单的例子如下。1.先定义一个简单的异常类(这样的定义是Checked的异常哦)package com.zju.study.exception;public class SimpleException extends Ex...

weixin_42511255的博客 631

反射方法中的异常的捕捉

1,问题场景: 我们通常在java开发中采用自定义异常,在业务中遇到非系统错误时抛出自定义异常,并在上层进行捕获,就能知道业务的具体出错信息。这种方法很常用,但是如果采用反射去自动调用某个方法时,却不能捕获到用户自定义的异常。 1.1代码演示如下: 其中BusinessException是自定义异常 定义Man对象,里面的setWork方法抛出自定义BusinessException异常 package com.cc.utils; import com.cc.tools.exception

heronsbill_peng 2012

C#高效反射调用方法类

MethodInfo methodInfo = typeof(Program).GetMethod("Call"); methodInfo.Invoke(program, parameters); methodInfo实际上已经用到反射了,只不过此时的反射

我的专栏 5028

java 获取反射异常信息_Java 异常与反射 总结

1.异常异常,简单来说,就是一个程序执行过程中发生的不正常情况的事件。它发生在程序的运行期间,干扰了正常的指令流程。如果没有处理异常,那么出现异常之后,程序会停止运行。异常分为运行异常和非运行异常。非运行异常也叫编译异常。对于编译异常编译器要求必须处理。否则无法运行。运行时异常编译器不要求强制处理。运行时异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。它们都继承于Exc...

weixin_36301296的博客 1194

捕获反射调用时产生的异常

 使用反射时如果被反射对象内部发生异常时通常的捕获异常语句及参数,不能截获其中的异常:try{//反射操作}catch(System.Exception ex){....}因为此时的异常类型已经不是System.Exception 类型,而是System.Reflection.TargetInvocationException 类型try{//反射操作}catch(System.Ref

蓝色沙滩 3390
上一篇: 结束线程方法
下一篇: 堆排序与归并排序
easyjsf
博客等级 码龄17年 19粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值