Java筆試題:給定一個ReadOnlyClass的對象roc,能否把這個對象的age值改成30?
阿新 • • 發佈:2018-09-27
acc 資料 謝謝 ble 技術 set exce turn 宋體 ,無法修改age的值。但是Java語言還有一個非常強大的特性:反射機制,所以本題中,可以通過反射機制來修改age的值。
)、方法( Method對象)或構造方法( Constructor對象)。對於本題而言,在獲取到 ReadOnly Class類的Class實例後,就可以通過反射機制獲取到age屬性對應的Field對象,然後可以通過這個對象來修改age的值,實現代碼如下:
在Java筆試面試中,經常會遇到代碼題,今天我們就來看一則Java代碼筆試題。
有如下代碼:
Class ReadOnlyClass { private Integer age=20; public Integer getAge() {return age;} }
現給定一個ReadOnlyClass的對象roc,能否把這個對象的age值改成30?
從正常編程的角度出發分析會發現,在本題中,age屬性被修飾為 private,而且這個類只提供了獲取age的 public的方法,而沒有提供修改age的方法,因此,這個類是一個只讀的類
在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取對象的信息以及動態調用對象的方法的功能稱為Java語言的反射機制。Java反射機制容許程序在運行時加載、探知、使用編譯期間完全未知的Class換句話說Java可以加載一個運行時才得知名稱的Class,獲得其完整結構。
在Java語言中,任何一個類都可以得到對應的 Class 實例,通過class實例就可以獲取類或對象的所有信息,包括屬性(Field對象
import java.lang.reflect.field; class ReadOnlyClass { private Integer age =20; public Integer getAge() { return age; } } public class Test { public static void main(string[] ages) throws Exception { ReadOnlyClass pt = new ReadOnlyClass(); Class<?> clazz = ReadOnlyClass.class; Field field = clazz.getDeclaredField("age") field.setAccessible(ture); field.set(pt,30); System.out.println(pt.getAge()); } }
程序的運行結果為:30
這就是全部答案,上海尚學堂Java培訓提供技術支持,需要Java資料或學習視頻請留言,謝謝!
Java筆試題:給定一個ReadOnlyClass的對象roc,能否把這個對象的age值改成30?