使用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方法的参数:第一个参数为该方法名,后面的参数为原方法中的参数的类类型。

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

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务