使用Java反射机制时出现java.lang.InstantiationException:异常

使用Java的反射机制,调用类中的某个方法时,结果出现java.lang.InstantiationException:的异常。完整异常日志如下:

java.lang.InstantiationException: com.tyf.reflect.Student
	at java.lang.Class.newInstance(Class.java:427)
	at com.tyf.reflect.Student.main(Student.java:31)
Caused by: java.lang.NoSuchMethodException: com.tyf.reflect.Student.<init>()
	at java.lang.Class.getConstructor0(Class.java:3082)
	at java.lang.Class.newInstance(Class.java:412)
	... 1 more

下面再贴出我的完整代码:

package com.tyf.reflect;
import java.lang.reflect.Method;
/*
 *@Author:yafeng
 *@Date:2019/10/11
 *@Time:21:24
 * Java反射入门
 */
public class Student {
    String name;
    String gender;
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Student(String name, String gender) {
        this.name = name;
        this.gender = gender;
    }

    public static void main(String[] args) {
        try{
            Class c = Student.class;
            Object o = c.newInstance();//初始化一个实例
            Method method_setName = c.getDeclaredMethod("setName", String.class);
            Method method_getName = c.getDeclaredMethod("getName");
            method_setName.invoke(o,"yafneg");
            Object name = method_getName.invoke(o);
            System.out.println(name);
        }catch (Exception e){
            e.printStackTrace();
        }
     }
}

我的代码的意图是通过反射来获取类中的setName()和getName()方法,结果一直报异常,异常位置未31行,即newInstance(),实例化时出现错误。当时还不接为什么这里还会出错?想了想还真是这样,因为你在这里实例化对象就相当于普通的new一个对象,由于我在类中实现了带参数的构造器,覆盖了原有默认的不带参数的构造器,因此不带参数的实例化对象自然会报错。

解决办法有两个:

  • 再手动添加一个不带参的构造器;
  • 在用newInstance()实例化对象时,带参数。

到这里问题得以解决,至于NoSuchMethodException即没该方法异常是由于前者实例化对象时引起的异常的连带异常,解决上述异常后,该异常自然解决。若仅发生了NoSuchMethodException异常,很大可能是因为getDeclaredMethod()的参数有问题,getDeclaredMethod方法的参数:第一个参数为该方法名,后面的参数为原方法中的参数的类类型。

欢迎各位小伙伴补充编程过程中遇到的各种错误以及错误的解决方法,致力于让编程更便利,让错误不再成为烦恼!

全部评论

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务