java反射異常之java.lang.NoSuchFieldException: school
今天調(diào)用下面的代碼的時(shí)候
Field schoolField = studentClass.getField("school");
schoolField.setAccessible(true);
schoolField.set(null, "中南林科大");
System.out.print("school:" + student.getSchool());
爆出java.lang.NoSuchFieldException: school異常
分析思路:
1 、分析反射代碼看字段有沒有寫錯(cuò),分析了,的確沒寫錯(cuò)。
2 、分析學(xué)生這個(gè)類里面的字段有沒有搞錯(cuò),我之復(fù)制的代碼,怕有空格什么的,所以重新寫這字段,然后還是報(bào)錯(cuò)。
3、看setAccessible 有沒有寫錯(cuò),這個(gè)的確是訪問私有權(quán)限的方法。
4、最后才發(fā)現(xiàn)是我的方法搞錯(cuò)了,不能用getField,需要用getDeclaredField
總結(jié):
getField用于返回一個(gè)指定名稱的屬性,但是這個(gè)屬性必須是公有的,這個(gè)屬性可以在父類中定義。如果是私有屬性或者是保護(hù)屬性,那么都會(huì)拋出異常提示找不到這個(gè)屬性
getDeclaredField獲得在這個(gè)類型的聲明中定義的指定名稱的屬性,這個(gè)屬性必須是在這個(gè)類型的聲明中定義,但可以使私有和保護(hù)的
原來是方法寫錯(cuò)了,權(quán)限不一樣,希望下次不要再患這個(gè)錯(cuò)誤
作者:chen.yu
深信服三年半工作經(jīng)驗(yàn),目前就職游戲廠商,希望能和大家交流和學(xué)習(xí),
微信公眾號(hào):編程入門到禿頭 或掃描下面二維碼
零基礎(chǔ)入門進(jìn)階人工智能(鏈接)