按域名瀏覽

Java中的反射

簡介

java中的反射是一種應用程序編程接口(API),用於在運行時檢查或修改接口、方法和類的行為。

java。朗。類提供了許多不同的方法,可用於元數據、檢查和改變接口、方法、類在運行時的行為。java。Lang和java。朗。反射包為反射提供所需的類。

反射應用程序編程接口(API)主要使用:

  1. IDE(集成開發環境),如MyEclipse, Eclipse, NetBeans等。
  2. 調試器
  3. 測試工具等等。

在反射的幫助下,我們可以在運行時調用方法,而不管它們中使用的訪問說明符。

圖:Java中的反射

反射可以用來獲得以下信息:

  1. 類:要知道該特定對象所屬的類的名稱,可以使用getClass()方法。
  1. 構造函數:要了解特定對象所屬類的公共構造函數,可以使用getConstructors()方法。
  1. 方法:要了解特定對象所屬類的公共方法,可以使用getMethods()方法。

看看

Java類的反射

  1. 使用forName()方法:此方法用於動態加載類並返回class類的實例。forName()方法不能用於基本類型。

例子:

class Animal {} class Dog {public static void main (String args[]) {class a = class。forName(“動物”);System.out.println (a.getName());}}

輸出:

動物

  1. 使用getClass()方法:此方法用於返回Class類的實例。如果您知道tyoe,則使用getClass()方法,它也可以用於基本類型。

例子:

類動物{}類狗{無效printName(對象obj){類b = obj. getclass ();System.out.println (b.getName());} public static void main (String args[]) {Animal s = new Animal();狗=新狗();t.printName (s);}}

輸出:

動物

  1. 使用.class擴展名:在java中,如果類型可用但沒有實例,那麼我們可以通過在類型名後麵附加“. Class”來獲取Class。此方法對於基元數據類型也很有用。

例子:

class Dog {public static void main (String args[]) {class c1 = boolean.class;System.out.println (c1.getName());Class c2 = Dog.class;System.out.println (c2.getName());}}

輸出:

布爾

動物

Java類反射示例

在這個例子中,有一個超類“Animal”和一個子類“Cat”。在這裏,我們試圖檢查類“Cat”。

進口. lang . class;進口數組;*;class Animal{} //將這個類放在不同的Cat.java文件中,public class Cat extends Animal {public void display () {System.out.println ("It 's a Cat.");}} //把這個放在Main.java文件類Main {public static void Main (String[] args) {try{//創建一個Cat對象Cat a1 = new Cat();//創建Class的對象//使用getClass() Class obj = a1.getClass();String name = obj.getName();System.out.println ("Name: " + Name);//獲取類的訪問修飾符int modifier = obj.getModifiers();//將訪問修飾符轉換為字符串字符串mod =修飾符。toString(修飾符);System.out.println ("Modifier: " + mod); // get the superclass of Cat Class superClass = obj.getSuperclass(); System.out.println ( "Superclass : " + superClass.getName() ); } catch ( Exception e ) { e.printStackTrace(); } } }

輸出:

姓名:貓

修飾符:public

超類:動物

在上麵的例子中,語句:Class obj = a1.getClass();

在這條語句中,我們試圖使用方法“getClass()”創建一個“Class”的對象“obj”。在對象的幫助下,可以調用“Class”的不同方法。

  1. obj.getName ():此方法用於返回類的名稱。
  2. obj.getModifiers ():此方法用於返回類的訪問修飾符。
  3. obj.getSuperclass ():此方法用於返回類的超類。

反射構造函數,方法和字段

在java中,我們可以使用java反射來檢查對象的類、方法和字段的構造函數。這可以通過使用包java.lang.reflect來完成,該包提供了可用於操作類成員的類。

  • 類構造函數它用於給出類中構造函數的信息。
  • 方法類:它用於給出類中方法的信息。
  • 領域類別:它用於給出類中字段的信息。
  1. Java中構造函數的反射

在Java中,我們可以使用Constructor類提供的不同方法檢查各種構造函數。這可以通過java.lang.reflect.Constructor類輕鬆完成。

例子:

在這個例子中,有兩個構造函數,每個構造函數的類名為“Bird”。

進口. lang . class;進口數組;*;class Bird{//定義不帶參數的公共構造函數public Bird(){} //定義帶有單個參數的私有構造函數private Bird (int age) {}} class Main{公共靜態void Main (String[] args) {try{//創建一個Bird對象Bird a1 = new Bird ();//通過getClass()創建Class的對象Class obj = a1.getClass();//獲取Bird Constructor的所有構造函數[]constructors = obj.getDeclaredConstructors();for(構造函數b:構造函數){//獲取構造函數的名稱System.out.println("構造函數名稱:" + b. getname ()));//獲取構造函數的訪問修飾符//將其轉換為字符串形式int modifier = b.getModifiers();字符串mod =修飾符。toString(修飾符);System.out.println ("Modifier: " + b.getModifiers()); // getting the number of parameters in constructors System.out.println ( "Parameters : " + b.getParameterCount() ); System.out.println (""); } } catch ( Exception e ) { e.printStackTrace (); } } }

輸出:

施工名稱:Bird

修飾符:public

參數:0

施工名稱:Bird

修飾符:private

參數:1

在上麵的例子中,語句:Constructor[] constructors = obj.getDeclaredConstructors();我們可以訪問Bird類中的所有構造函數,並將它們分配到constructor類型的構造函數數組中。

為了獲取構造函數的信息,我們使用對象' b '。

  1. b.getName ():返回構造函數的名稱。
  2. b.getModifiers ():用於返回構造函數的訪問修飾符。
  3. b.getParameterCount ():用於返回每個構造函數中傳遞的參數數量。
  1. Java中方法的反映

要獲得關於類中出現的不同方法的信息,可以使用提供各種方法的Method類。

例子:

在這個例子中,我們試圖獲得“Bird”類中方法的所有信息。

進口. lang . class;進口數組;*;class Bird{//類的public void方法display() {System.out.println ("It 's a Bird.");} private void類型(){System.out.println (" sparrow");}} class Main {public static void Main (String args[]) {try{//創建一個Bird對象Bird d1 = new Bird ();//使用getClass()創建Class的對象Class obj = d1.getClass();//使用Class的對象獲取Bird Method的所有聲明方法[]methods = obj.getDeclaredMethods();//創建Method類的對象(Method c: methods){//獲取方法的名稱System.out.println ("Method Name: " + c. getname ());//獲取方法的訪問修飾符int modifier = m.g tmodifiers ();system . out。println( "Modifier : " + Modifier.toString(modifier) ); // getting the return types of method System.out.println ( "Return Type : " + c.getReturnType() ); System.out.println (" "); } } catch ( Exception e ) { e.printStackTrace(); } } }

輸出:

方法名稱:display

修飾符:public

返回類型:void

方法名稱:type

修飾符:private

返回類型:void

表達式Method[] methods = obj.getDeclaredMethods();返回類中出現的所有方法。

為了獲取構造函數的信息,我們使用對象' c '。

  1. c.getName ():它返回方法的名稱。
  2. c.getModifiers ():用於返回方法的訪問修飾符。
  3. c.getReturnType ():它用於返回方法的類型。
  1. Java中字段的反射

使用字段類的方法,我們還可以檢查和修改類的各個字段。

例子:

在這個例子中,我們有一個名為“Bird”的類,它有一個公共字段名為“type”。

進口. lang . class;進口數組;*;類鳥{公共字符串類型;} class Main {public static void Main (String args[]) {try{//創建一個Dog Bird對象d1 = new Bird ();//使用getClass()創建Class的對象Class obj = d1.getClass();//訪問並設置類型field field field1 = obj. //getField ("type");field1。集合(d1,“麻雀”);//獲取字段類型值String typeValue = (String) field1.get(d1);System.out.println ("Value: " + typeValue); // getting the access modifier of the field type int mod = field1.getModifiers(); // convert the modifier to String form String modifier1 = Modifier.toString (mod); System.out.println ( "Modifier : " + modifier1 ); System.out.println (" "); } catch (Exception e) { e.printStackTrace(); } } }

輸出:

值:麻雀

修飾符:public

表達式Field field1 = obj。getField (" type ");正在訪問“Bird”類的公共字段,並將該值分配給“field”類的對象“field1”。

為了獲取構造函數的信息,我們使用對象' field1 '。

  1. field1。設置():用於設置字段的值。
  2. field1.getModifiers ():以整數形式返回字段的值。
  3. field1。Get ():它用於返回字段的值。

Reflectio的優點n

Java,反射是有幫助的,因為它有助於按名稱動態檢索類和數據結構的信息。它還允許在執行程序中對它們進行操作。這是一個非常強大的特性,是其他傳統語言(如Pascal、C、Fortran或c++)所不具備的。

Java Reflection API有助於在運行時檢查接口、方法和類,而無需在編譯時了解它們的內部信息。

《阿凡達》的照片
beplay2018官网優秀的學習團隊
beplay2018官网Great Learning的博客涵蓋了最新的技術發展和創新,可以用來建立有價值的職業生涯。你會找到職業指南、技術教程和行業新聞,讓自己跟上快速變化的技術和商業世界。

留下評論

你的電郵地址將不會公布。必填字段已標記

與夢想的工作免費的印度最值得信賴的教育平台上的證書課程

滾動到頂部
Baidu
map