面試官:你來說說反射如何獲取私有對象的屬性和方法

面試官:你來說說反射如何獲取私有對象的屬性和方法


最近, 的朋友小鹿參加了一場 面試。

有一道題是這樣的 >>>

【面試官問:你來說說反射如何獲取私有對象的屬性和方法?】

面試官:你來說說反射如何獲取私有對象的屬性和方法

問題的答案我們文章中揭曉,先看下反射的基礎知識,無論你是學動態代理,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中

面試官:你來說說反射如何獲取私有對象的屬性和方法

① 獲取成員變量

  • (1)設置值 void set (Object obj, Object value)
  • (2)獲取值 get (Object obj)
  • (3)忽略訪問權限修飾符的安全檢查 setAccessible (true): 暴力反射
  • 面試官:你來說說反射如何獲取私有對象的屬性和方法

    面試官:你來說說反射如何獲取私有對象的屬性和方法

    面試官:你來說說反射如何獲取私有對象的屬性和方法

    輸出結果:

    面試官:你來說說反射如何獲取私有對象的屬性和方法

    如何獲取私有變量的值?(面試)

    面試官:你來說說反射如何獲取私有對象的屬性和方法

    面試官:你來說說反射如何獲取私有對象的屬性和方法

    ② 獲取構造方法

    面試官:你來說說反射如何獲取私有對象的屬性和方法

    面試官:你來說說反射如何獲取私有對象的屬性和方法

    面試官:你來說說反射如何獲取私有對象的屬性和方法

    面試官:你來說說反射如何獲取私有對象的屬性和方法

    ③ 獲取成員方法

    面試官:你來說說反射如何獲取私有對象的屬性和方法

  • 執行方法:Object invoke (Object obj, Object... args)
  • 獲取方法名稱:String getName ();
  • 面試官:你來說說反射如何獲取私有對象的屬性和方法

    面試官:你來說說反射如何獲取私有對象的屬性和方法

    輸出結果:

    面試官:你來說說反射如何獲取私有對象的屬性和方法


    ④ 獲取全類名

    String getName()

    面試官:你來說說反射如何獲取私有對象的屬性和方法

    _0328_reflect.constructor.Person


    分享到:


    相關文章: