溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

關(guān)于Java反射庫的案例分析

發(fā)布時(shí)間:2020-07-23 17:07:38 來源:億速云 閱讀:155 作者:清晨 欄目:編程語言

這篇文章主要介紹關(guān)于Java反射庫的案例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

介紹

    java反射庫(reflection library) 提供了一個(gè)非常豐富且精心設(shè)計(jì)的工具集, 以便編寫能夠動(dòng) 態(tài)操縱 Java 代碼的程序。這項(xiàng)功能被大量地應(yīng)用于 JavaBeans 中。使用反射, Java 可以支持 Visual Basic 用戶習(xí)慣 使用的工具,特別是在設(shè)計(jì)或運(yùn)行中添加新類時(shí), 能夠快速地應(yīng)用開發(fā)工具動(dòng)態(tài)地查詢新添加類的能力。 

反射的作用

    1.在運(yùn)行時(shí)分析類的能力;

    2.在運(yùn)行時(shí)查看對(duì)象;

    3.實(shí)現(xiàn)通用的數(shù)組操作代碼;

    4.利用 Method 對(duì)象, 這個(gè)對(duì)象很像中的函數(shù)指針。

Java反射中常用技術(shù)

  1.動(dòng)態(tài)獲取類,例如:根據(jù)一個(gè)字符串獲取該類

 String name="xxxxxxxxxxxx";
 Class c1 = name.getClass();
System.out.println(c1.getName());

運(yùn)行結(jié)果如下:

關(guān)于Java反射庫的案例分析

2.動(dòng)態(tài)驗(yàn)證類是否存在與合法性,例如:比如上面獲取的java.lang.String類名 

String name = "java.lang.String";
Class c1 = null;
try {
   c1 = Class.forName(name);
   System.out.println(c1.getName());
} catch (ClassNotFoundException e) {
}

運(yùn)行結(jié)果如下:

關(guān)于Java反射庫的案例分析

注:我們也可以通過c1.getSuperclass()獲取到它的父類

3.獲取類的成員

   

 3.1.屬性

        a. 獲取所有成員變量

            getDeclaredFields 

        b. 獲取特定的成員變量

            getDeclaredField(參數(shù)類型.class,....) 

    3.2.方法

            a.獲取所有方法

                  getDeclareMethods()

          b.獲取方法的返回值類型

                  getReturnType()

          c. 獲取方法的傳入?yún)?shù)類型

                  getParameterTypes();

           d.獲取指定的方法

                  getDeclareMethod("方法名,參數(shù)類型.class,....")

    3.3.構(gòu)造器

          a. 獲取所有構(gòu)造器

                public Constructor[] getConstructors()

                public Constructor[] getDeclaredConstructors()

           b.獲取單個(gè)指定構(gòu)造器

                 public Constructor getConstructor(Class... parameterTypes)

                 public Constructor getDeclaredConstructor(Class... parameterTypes)

4.調(diào)用構(gòu)造器

newInstance 方法,例如:調(diào)用Test類的構(gòu)造器

        Test帶參數(shù)的構(gòu)造器

public Test(int age , String name){
   this.age = age;
   his.name = name;
   System.out.println("hello" + name + "i am" + age);
}

    使用newInstance方法調(diào)用構(gòu)造器

Class[] p = {int.class,String.class};
constructors = c4.getDeclaredConstructor(p);
constructors.newInstance(24,"HuangLinqing");

打印結(jié)果如下圖:

關(guān)于Java反射庫的案例分析

以上是關(guān)于Java反射庫的案例分析的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI