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

举报
chenyu 发表于 2021/07/27 00:48:08 2021/07/27
【摘要】 今天调用下面的代码的时候   Field schoolField = studentClass.getField("school"); schoolField.setAccessible(true); schoolField.set(null, "中南林科大"); System.out.print("school:" + student.getSch...

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

 


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


爆出java.lang.NoSuchFieldException: school异常

 

 

分析思路:

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

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

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

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

总结:

 

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

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

 

 

 

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

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/53319163

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。