首頁 > 科技

基礎到源碼一套搞定,清華學霸最新整理的Java反射學習筆記太全了

2021-07-08 12:57:51

Hello,今天給各位童鞋們分享的是Java反射,趕緊拿出小本子記下來吧

1.反射介紹

1.1 什麼是反射

Java 反射機制是 Java 語言一個很重要的特性,它使得 Java 具有了「動態性」。在 Java程式運行時,對於任意的一個類,我們能不能知道這個類有哪些屬性和方法呢?對於任意的一個物件,我們又能不能呼叫它任意的方法?答案是肯定的!這種動態獲取類的資訊以及動態呼叫物件方法的功能就來自於 Java 語言的反射(Reflection)機制。

1.2 反射的作用

簡單來說兩個作用,RTTI(運行時類型識別)和 DC(動態創建)。我們知道反射機制允許程式在運行時取得任何一個已知名稱的 class 的內部資訊,包括其 modifiers(修飾符),fields(屬性),methods(方法)等,並可於運行時改變 fields 內容或呼叫methods。那麼我們便可以更靈活的編寫程式碼,程式碼可以在運行時裝配,無需在元件之間進行原始碼連結,降低程式碼的耦合度;還有動態代理的實現等等;但是需要注意的是反射使用不當會造成很高的資源消耗!

Java 反射機制是 Java 語言一個很重要的特性,它使得 Java 具有了「動態性」。

反射機制的優點:

更靈活。更開放。反射機制的缺點:

降低程式執行的效率。增加程式碼維護的困難。2. 創建物件過程

2.1 創建 Java 物件的三個階段

2.2 創建物件時記憶體結構

實際上,我們在載入任何一個類時都會在方法區中建立「這個類對應的 Class 物件」,由於「Class 物件」包含了這個類的整個結構資訊,所以我們可以通過這個「Class 物件」來操作這個類。

我們要使用一個類,首先要載入類;載入完類之後,在堆記憶體中,就產生了一個 Class 類型的物件(一個類只有一個 Class 物件),這個物件就包含了完整的類的結構資訊。我們可以通過這個物件知道類的結構。這個物件就像一面鏡子,透過這個鏡子可以看到類的結構,所以,我們形象的稱之為:反射。 因此,「Class 物件」是反射機制的核心。

3. 反射的具體實現

3.1 獲取 Class 物件的三種方式

通過 getClass()方法。

通過.class 靜態屬性。

通過 Class 類中的靜態方法 forName()

3.1.1 創建Users類

3.1.2 通過 getClass()方法獲取 Class 物件

3.1.3 通過.class 靜態屬性獲取 Class 物件

3.1.4 通過 forName()獲取 Class 物件

3.2 獲取類的構造方法

3.2.1 修改Users類

3.2.2 獲取構造方法

3.2.3 通過構造方法創建物件

3.3 獲取類的成員變數

3.3.1 獲取成員變數

3.3.2 操作成員變數

3.4 獲取類的方法

3.4.1 修改Users類

3.4.2 獲取方法並呼叫

4. setAccessible 方法

setAccessible()方法:

setAccessible 是啟用和禁用訪問安全檢查的開關。值為 true 則指示反射的物件在使用時應該取消 Java 語言訪問檢查。值為 false 則指示反射的物件應該實施 Java 語言訪問檢查;預設值為 false。

由於 JDK 的安全檢查耗時較多,所以通過 setAccessible(true)的方式關閉安全檢查就可以達到提升反射速度的目的。

好啦,今天的文章就到這裡了,希望能夠幫助到螢幕前迷茫的你們


IT145.com E-mail:sddin#qq.com