最近, 的朋友小鹿參加了一場 面試。
有一道題是這樣的 >>>
【面試官問:你來說說反射如何獲取私有對象的屬性和方法?】
問題的答案我們文章中揭曉,先看下反射的基礎知識,無論你是學動態代理,Spring 的 AOP 都離不開反射的知識。
反射
最開始接觸反射這個概念,是在初中上物理--光的反射原理,是不是格外的熟悉親切。
1、那什麼是Java 的反射??
對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為 java 語言的反射機制。
如果你對Java 的類不是很熟悉,可以移步>>
2、Java 反射的好處?
① 在程序運行過程中操作對象
② 可以解耦,提高程序的擴展,如動態代理
3、Java 代碼運行過程
*.java 文件 >>> *.class 字節碼文件 >>> 類加載
加載具體是指把類的.class 文件中的二進制數據讀入到內存中,把它存放在運行時數據區的方法區內,然後再堆區創建一個 java.lang.Class 對象,用來封裝類在方法區內的數據結構
4、獲取 Class 對象的三種方式
① Class.forName ("全類名")
② 類名.class
③ 對象.getClass ()
5、Class對象的功能
可以查看 JDK中文在線文檔
java.lang中
① 獲取成員變量
輸出結果:
如何獲取私有變量的值?(面試)
② 獲取構造方法
③ 獲取成員方法
輸出結果:
④ 獲取全類名
String getName()
_0328_reflect.constructor.Person
閱讀更多 Python大星 的文章