反射调用主方法异常解决

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

三相电机控制中的端电压、相电压与线电压波形解析

本文深入解析了三相电机控制中端电压、相电压与线电压的核心概念与波形差异。通过对比方波控制、SPWM和SVPWM三种主流控制策略下的实测波形特征,揭示了不同控制逻辑对电压波形(如梯形波、正弦波、马鞍波)的影响。文章重点阐述了SVPWM控制如何通过生成马鞍波形端电压来提高直流母线电压利用率,并提供了实用的波形测量与调试指南,帮助工程师深入理解电机控制原理并进行有效调试。

qsc901234567的博客 1399

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

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

yuzhidao的博客 1万+

小红书图文AI创作:输入主题,一键生成图文(coze工作流教程+获取)

输入主题,工作流一键生成小红书风格图文,30s一条,可批量生成

2301_79384090的博客 2799

Xilinx XDMA IP核配置实战:AXI Memory Mapped vs Stream选型指南(附PCIe调试技巧)

本文深入解析Xilinx XDMA IP核配置中AXI Memory Mapped与AXI Stream两种DMA接口的核心区别与选型策略。针对PCIe高速数据传输场景,详细对比了二者在数据特性、延迟、硬件资源及软件复杂度上的差异,为FPGA工程师在数据采集、实时处理等项目中做出高效设计决策提供实战指南,并附有关键的PCIe调试技巧。

qsc901234的博客 585

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

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

pluie-cloud的博客 1万+

lidar360 V8.0 & lidar360MLS V8.0雷达点云数据处理软件

机载林业 — 基于机载激光雷达点云数据提取一系列森林结构参数(如:高度分位数、叶面积指数、郁闭度等),分割单木并提取单木参数(包括树的位置、树高、胸径、枝下高、冠幅等属性),利用软件的多种回归分析功能可以结合地面调查数据反演森林生物量、蓄积量等功能参数。还可以生成等高线、山体阴影、坡度、坡向、粗糙度等多种产品。分类 — LiDAR360提供多种分类功能,包括地面点分类、模型关键点分类、选择区域地面点分类、机器学习模型分类(可高效地分离建筑、植被、路灯等通用类别)、深度学习模型分类、自定义深度学习分类等。

2403_83796253的博客 5151

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

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

916

【制作100个unity游戏之22】3DRPG游戏开发07——其他详细的设计

我们会有有很多单例,如果每个单例都去写会很麻烦,所以我们定义泛型单例模式 Singleton,我们将所有的单例都继承这个泛型单例,就省略很多重复的工作定义一个GameManager类,继承Singleton,控制整个游戏的进度,比如如果主角死了,广播,游戏结束调用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2577

【项目解析】2KW 230V 数字逆变器控制系统(二)

【项目解析】 2KW 230V 数字逆变器控制系统(一) 项目的 交流输出电压 并不是单纯一个电压环就能控制好的,而是典型的 双环控制架构:最终占空比控制量会经过计算: 然后写入 单片机 TMM 定时器的比较寄存器 (TMGRA0/TMGRD0/TMGRC1), → 定时器输出互补 PWM, → 驱动 IGBT 全桥, → 经过 LC 滤波形成 230 VAC / 50Hz 的正弦电压。总结交流电压是双环控制的结果:目标/作用:把输出 RMS 电压稳到目标(例如 230 VAC);在母线波动与负载变化下

Naiva的博客 1297

java反射调用出错

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

chenminghe271的专栏 887

微观交通流仿真软件:SUMO (Simulation of Urban MObility)_(8).仿真场景创建与编辑

总结文件()包含了仿真过程中的总体统计信息,如车辆生成数、平均速度等。加载总结文件使用Python的提取关键信息通过以上步骤,可以使用SUMO及其相关工具和库创建和编辑交通仿真场景。无论是手动创建、使用工具转换现有数据,还是通过Python脚本自动生成,SUMO都提供了丰富的功能来满足不同需求。此外,Traci库允许在仿真过程中动态调整交通场景,从而实现更精细的控制和优化。最后,通过对输出文件的分析,可以评估仿真结果并进行进一步的改进。

kkchenjj的博客 1269

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

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

weixin_31040783的博客 1517

告别传统RAG的痛点!Agent Skills让知识库检索更智能(本地知识库搭建新思路:用Agent Skills实现渐进式检索)

传统RAG在知识库检索中存在文档结构丢失、Token消耗大等问题 📚 Agent Skills通过分层索引、渐进式检索等设计,实现了更智能的本地知识库检索方案 🤖 本文详细介绍了Agent Skills的核心设计理念、与传统RAG的对比以及实践建议,帮助你搭建高效的知识库系统 ✅

XiaoqiangClub的博客 693

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

weixin_39936086的博客 1068

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

m0_50140524的博客 1267

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

我们通常在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、付费专栏及课程。

余额充值