搜尋
首頁Javajava教程JAVA中的反射

反射,顧名思義,是JAVA中的一個API(應用程式介面)功能,透過它可以全面檢查類別的運行時實例。它是 Java.lang.reflect 套件的一部分。這個包必須在程式開始時導入,然後呼叫函數來理解「反射」的功能。任何階級的行為都可以研究;可以在運行時使用反射 API 提取或修改元資料。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

文法

反射API下擷取類別資訊的常用函數語法如下:

  • public String getName(parameter ):此函數傳回類別名稱。
  • public boolean isInterface(parameter ):此函數檢查該類別是否是一個接口,並傳回一個布林值(true 或 false)。
  • public boolean isArray(parameter ):此函數檢查變數是否為數組,並傳回一個布林值(true 或 false)。
  • public Constructor[] getDeclaredConstructors(parameter ) throws SecurityException: 此函式檢查類別中的建構子並傳回特定類別中使用的建構函式的數量。此外,它還有一個安全異常和與使程式不間斷工作相關的捕獲。
  • public Method[] getDeclaredMethods(parameter) throws SecurityException: 此函數檢查類別中的方法並傳回特定類別中使用的方法的數量。此外,它還有一個安全異常和相關的捕獲,使程式可以不間斷地工作。
  • public Class getSuperclass(parameter ):此函數傳回基底類別的超類別。
  • public boolean is Primitive(parameter):此函數檢查給定參數是否為原始參數並傳回一個布林值。

反射在 JAVA 中是如何運作的?

反射類別使用Java.lang.reflect套件中定義的不同方法來提取類別資訊。可以使用 getClass() 方法提取有關類別的信息,使用 getConstructors() 方法提取建構函數,使用 getMethods() 方法提取方法資訊。這些方法在反射 API 中定義,但傳回類別的訊息,包括方法、建構函數等。反射API用於JAVA程式、IDE(整合開發環境),如eclipse、Netbeans。借助以下部分提供的範例可以很好地理解這一點。

JAVA中反射的例子

下面提到了不同的例子:

範例#1

代碼:

//package test;
import java.lang.Class;
public class test{
public static void main(String args[]){
Class<boolean> c1 = boolean.class;
System.out.println("Here, the class name is: "+c1.getName());
Class<test> c2 = test.class;
System.out.println("This is another instance of class is used to derive class name : "+c2.getName());
}
}</test></boolean>

輸出:

JAVA中的反射

說明:請檢查上面提供的範例。它有一個包,其中包含所有名為“test”的類別。測試包有一個“測試聲明”類別。該類別還包含 main 方法,程式將從該方法開始執行。類別“Class ”是jAVA中的識別碼反射類別。這個類別是在上面宣告的「java.lang.Class」函式庫的幫助下啟用的。 Boolean本身是JAVA中的一個類別。布林值是一種原始資料類型,如字串、整數或字元。這個例子說明我們可以提取原始資料類型的信息(最終是JAVA中的類,這也是JAVA被稱為純粹物件導向語言的原因)。 “getName()”函數用於取得名稱此處由名為“C1”的物件實例化的類別。

在下一行中,不使用原始資料類型,而是考慮使用名為「test」的使用者定義資料類型「class」來提取資料。 「類別」是一個用名為「C2」的物件實例化的反射類別。這裡測試類別名,並使用該物件使用函數「getName()」提取該類別的名稱。最終輸出包含這些函數的回傳值並顯示在輸出畫面上。

範例#2

代碼:

//package test;
import java.lang.Class;
class Simple{}
public class test{
public static void main(String args[]){
try{
Class> c=Class.<em>forName</em>("Simple");
System.<em>out</em>.println("The result is: "+c.isInterface());
}catch(Exception e){System.<em>out</em>.println(e);}
}
}

輸出:

JAVA中的反射

說明: 在上面的範例中,建立了一個名為「test」的套件,如前面範例 1 中所建立的。該套件包含一個類別名稱“Simple”,它不是主類別。這裡的主類別是「測試」類,它包含程式將從中開始執行的 main 方法。 「類別>」是反射類別的標識符,它是透過此處名為「c」的物件實例化的。然後,該物件用於提取名為「isInaterface」的函數的決策指示符(True 或 false)。此函數引入一個類別作為參數;在這種情況下,作為參數引入的類別是「Simple」類別。此類別不是接口,因此在輸出畫面中返回“false”作為結果。為了呼叫這個函數,使用了類別物件“c”。

優點

在JAVA中使用反射的一些優點如下:

  1. 這是提取任何類別資訊的最佳方法之一。這些資訊可以包含從建構函數到類別和方法的資訊。
  2. 此功能的最大優點之一是我們還可以提取有關私有方法和類別的資訊。因此,如果惡意隱藏在程式中,任何內容都可以使用此功能提取出來。
  3. 此功能為調試器提供了很大的靈活性,因為它們可以輕鬆調試類,而不是單獨調試每個類。
  4. 這也增加了一個可擴充性功能,可以透過使用實例來新增外部自訂類別。
  5. 這在實例的幫助下體現了 OOP 語言的真正力量。
  6. 這用於在程式運行期間動態載入和重新載入類別。

結論

JAVA反射使得在根本不知道類別名稱的情況下內省類別、介面、方法等成為可能。這一切都是在編譯時完成的。這被認為是 JAVA 最強大的屬性之一,因為它可以用來建立類別的實例,並且可以使用它來提取類別的私有成員。開發人員也可以在運行時使用它並進行資料庫物件映射。

以上是JAVA中的反射的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器