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、最后才發(fā)現(xiàn)是我的方法搞錯了,不能用getField,需要用getDeclaredField
總結:
getField用于返回一個指定名稱的屬性,但是這個屬性必須是公有的,這個屬性可以在父類中定義。如果是私有屬性或者是保護屬性,那么都會拋出異常提示找不到這個屬性
getDeclaredField獲得在這個類型的聲明中定義的指定名稱的屬性,這個屬性必須是在這個類型的聲明中定義,但可以使私有和保護的
原來是方法寫錯了,權限不一樣,希望下次不要再患這個錯誤
作者:chen.yu
深信服三年半工作經(jīng)驗,目前就職游戲廠商,希望能和大家交流和學習,
微信公眾號:編程入門到禿頭 或掃描下面二維碼
零基礎入門進階人工智能(鏈接)