Java基礎 200320

1. 什麼是反射?反射的應用場景?

JAVA 反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱爲 java 語言的反射機制。

獲取類對象的三種方式:

  • 通過 object 類的 getClass () 函數,由於 object 是根類,每一個類都有這個函數

  • 每一個類(包括基本數據類型,注意這裏基本數據類型不用轉成包裝類)都有一個 class 屬性,靜態屬性,通過類名直接訪問

  • 通過 Class 類的靜態方法 forName(String className)

應用:

  • 反射是很多框架的基礎
  • 通過反射運行配置文件
  • 通過反射越過泛型檢查

2. 代理模式有什麼用?應用場景是什麼?

代理(Proxy)模式是結構型的設計模式之一,它可以爲其他對象提供一種代理(Proxy)以控制對這個對象的訪問。所謂代理,是指具有與被代理的對象具有相同的接口的類,客戶端必須通過代理與被代理的目標類交互。

應用場景:

  • 需要控制對目標對象的訪問。
  • 需要對目標對象進行方法增強。如:添加日誌記錄,計算耗時等。
  • 需要延遲加載目標對象。

3. 動態代理的實現方式都有什麼?那種實現效率高?

實現動態代理的兩種方式: JDK 動態代理和 Gglib 動態代理

  • JDK 動態代理是實現了被代理對象的接口, Cglib 是繼承了被代理對象。

  • JDK 和 Cglib 都是在運行期生成字節碼,JDK 是直接寫 Class 字節碼,Cglib 使用 ASM 框架寫 Class 字節碼,Cglib 代理實現更復雜,生成代理類比 JDK 效率低。

  • JDK 調用代理方法,是通過反射機制調用,Cglib 是通過 FastClass 機制直接調用方法,Cglib 執行效率更高。


4. 動態代理是什麼?與靜態代理的區別在於?

Java 中的靜態代理要求代理主題 (ProxySubject) 和真實主題 (RealSubject) 都實現同一個接口 (Subject)。靜態代理中代理類在編譯期就已經確定,而動態代理則是 JVM 運行時動態生成,靜態代理的效率相對動態代理來說相對高一些,但是靜態代理代碼冗餘大,一但需要修改接口,代理類和委託類都需要修改。


【Java 面試那點事】

這裏致力於分享 Java 面試路上的各種知識,無論是技術還是經驗,你需要的這裏都有!

這裏可以讓你【快速瞭解 Java 相關知識】,並且【短時間在面試方面有跨越式提升】

面試路上,你不孤單!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章