黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java反射機制的應(yīng)用

Java反射機制的應(yīng)用

更新時間:2022-10-20 10:20:51 來源:動力節(jié)點 瀏覽1509次

概念:

java反射機制可以動態(tài)獲取類的各種信息,如方法、屬性等。并且可以生成該類的對應(yīng)實例;可以調(diào)用任何對象的任何方法,即jvm(虛擬機)允許代碼在運行過程中獲取類的內(nèi)部信息

在使用反射機制時,一個非常重要的Class就是Class,它是由類加載后的 JVM(虛擬機)

java反射機制功能:

在運行時確定任何對象的類

在運行時構(gòu)造任何類的對象;

在運行時確定任何類的成員變量和方法;

在運行時調(diào)用任意對象的方法;

生成動態(tài)代理;

反射的優(yōu)缺點:

優(yōu)勢:

運行時可以判斷類型并動態(tài)加載類,提高了代碼的靈活性。訪問不可訪問的成員變量等;獲取類的方法和成員變量;

缺點:

Java反射相當于一系列解釋操作。這個過程需要通知jvm(虛擬機),所以性能比直接源碼慢很多。它無法識別編譯器中的錯誤。錯誤只能在運行時發(fā)現(xiàn),增加了難度

Java反射機制類:

java.lang.Class //類
java.lang.reflect.Constructor //構(gòu)造方法
java.lang.reflect.Field //類的成員變量
java.lang.reflect.Method //類方法
java.lang.reflect.Modifier //訪問權(quán)限

反射的應(yīng)用場景:

模塊化開發(fā),通過反射調(diào)用對應(yīng)的字節(jié)碼;

動態(tài)代理設(shè)計模式

Spring和hibernate框架等

一個結(jié)合注解的框架,如Retrofit

例子:

JDBC編程中,加載數(shù)據(jù)庫驅(qū)動時應(yīng)用反射機制;

Class.forName("com.mysql.jdbc.Driver") 加載驅(qū)動類并在DriverManager類中注冊驅(qū)動類實例。

獲取類對象的三種方法

1.使用已知對象的“getClass()”方法,例如:

   /*
       * 如何獲取字節(jié)碼對象:
       * 要使用此方法,您必須指定特定的類并創(chuàng)建對象。
      */
 公共類 GetClassTest {
        /*類的方法和屬性*/
        公共靜態(tài)無效get(){
             GetClassTest 測試 = 新的 GetClassTest();
             Class class = test.getClass();//可以返回<span style = "font family: Arial, Helvetica, sans serif;" > getclasstest 類的類對象</ span>
        }
    }

2.Class.forName("類名"),例如

/*
 * 只要傳遞給定類的字符串名稱,就可以獲得該類,擴展性更強。
 * 但是可以通過使用Class中的方法來完成。
 * 這個方法是forName
 * 這種方法只要有名字就更方便,擴展性更好。
 */
公共類 ForNameTest {
    /*類的方法和屬性*/
    公共靜態(tài)無效get(){
         Class class = Class.forName("Package name.RefClass");//加載RefClass Class,生成對應(yīng)Class對象,初始化RefClass Class;
    }
}

3.類名class,例如:

  /*
   * 任何數(shù)據(jù)類型都有一個靜態(tài)屬性Class來獲取其對應(yīng)的類圖像。
   * 比較簡單,但是我們還是需要在類中顯式使用靜態(tài)成員。
   * 擴展不夠。
  */
    公共類 ClassTest {
        /*類的方法和屬性*/
        公共靜態(tài)無效get(){
             Class class = RefClass.class;//加載RefClass Class并生成對應(yīng)的Class對象,但RefClass Class沒有初始化;
        }
}

可通過類對象獲取的信息

class.getName();//獲取類名包含包名的路徑
class.getPackage();//獲取類的包信息
class.getSimpleName();//獲取類名
class.getModifiers();//獲取類訪問權(quán)限
class.getDeclaredClasses();//內(nèi)部類
class.getDeclaringClass();//外部類
class.getType();//字段類型
班級。getModifiers();//字段訪問修飾符
class.getMethods();// 獲取類中的所有公共方法,包括父類中的方法
class.getDeclaredMethods();// 獲取類中的所有方法,包括公共和私有方法,但不包括父類中的方法
class.isPrimitive();//判斷是否為基本類型
class.isArray();//判斷是否為集合類
class.isAnnotation();//判斷是否為注解類
class.isInterface();//判斷是否為接口類
class.isEnum();//判斷是否為枚舉類
class.isAnonymousClass();//判斷是否為匿名內(nèi)部類
class.isAnnotationPresent(Deprecated.class);//判斷是否被注解類修改

獲取方法的方法名和參數(shù)

//遍歷所有方法
for (方法 m : 聲明方法){
    // 獲取方法名
    System.out.print(m.getName()+"(");
    // 用于判斷是否為第一個參數(shù)
    布爾 isFrist = true;
    // 獲取方法的所有參數(shù)類
    類<?>[] parameterTypes = m.getParameterTypes();
    //遍歷所有參數(shù)   
 for (Class<?> clazz : parameterTypes){
        如果(isFrist){
            System.out.print(clazz.getName());
            isFrist = 假;
        } 別的 {
            System.out.print("," + clazz.getName());
        }
    }
    System.out.println(");");
}

以上就是關(guān)于“Java反射機制的應(yīng)用”介紹,大家如果想了解更多相關(guān)知識,不妨來關(guān)注一下動力節(jié)點的Java在線學(xué)習(xí),里面的課程內(nèi)容細致全面,很適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對大家能夠有所幫助哦。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 大片刺激免费播放视频 | 亚洲午夜在线观看 | 欧美在线播放成人a | 国产午夜精品不卡视频 | 操榴视频| 欧美一区二区三区免费观看视频 | 国产精品成人免费视频不卡 | 日韩中文网| 黄色毛片在线 | 无遮挡h纯内动漫在线观看 无遮挡1000部拍拍拍免费观看 | 国产高清国产精品国产k | 热综合一本伊人久久精品 | 天天插天天插 | 一级片在线视频 | 国产大学生一级毛片绿象 | 天天躁日日躁狠狠躁黑人躁 | 亚洲天堂三级 | 欧美一区二区三区不卡免费 | 国产福利不卡 | 日韩精品免费观看 | 久久国产精品永久免费网站 | 免费色视频网站 | 国产精品不卡 | 日韩成a人片在线观看日本 日韩操操操 | 免费黄色短片 | xxx性欧美在线观看 youjizzxxxx18日本 | 日韩精品成人免费观看 | 日本黄大片 在线播放 | 色www亚洲| 天天操夜夜操狠狠操 | 毛片免费看看 | 全部免费特黄特色大片视频 | 一级成人毛片 | 香蕉视频黄网站 | 日韩美女影院 | www三级| 亚洲第一页在线播放 | 一区小说二区另类小说三区图 | 99精品国产综合久久久久 | 伦理片免费看 | 外国黄色毛片 |