java反射异常之java.lang.NoSuchFieldException: school

今天调用下面的代码的时候

            Field  schoolField = studentClass.getField("school");
            schoolField.setAccessible(true);
            schoolField.set(null, "中南林科大");
            System.out.print("school:" + student.getSchool());


爆出java.lang.NoSuchFieldException: school异常

 
分析思路:

                  1 、分析反射代码看字段有没有写错,分析了,的确没写错。

                  2 、分析学生这个类里面的字段有没有搞错,我之复制的代码,怕有空格什么的,所以重新写这字段,然后还是报错。

                  3、看setAccessible 有没有写错,这个的确是访问私有权限的方法。

                  4、最后才发现是我的方法搞错了,不能用getField,需要用getDeclaredField
总结:


getField用于返回一个指定名称的属性,但是这个属性必须是公有的,这个属性可以在父类中定义。如果是私有属性或者是保护属性,那么都会抛出异常提示找不到这个属性

getDeclaredField获得在这个类型的声明中定义的指定名称的属性,这个属性必须是在这个类型的声明中定义,但可以使私有和保护的

 

原来是方法写错了,权限不一样,希望下次不要再患这个错误



作者:chen.yu
深信服三年半工作经验,目前就职游戏厂商,希望能和大家交流和学习,
微信公众号:编程入门到秃头 或扫描下面二维码
零基础入门进阶人工智能(链接)