大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

Java反射機制的應用

更新時間:2022-10-20 10:20:51 來源:動力節點 瀏覽1493次

概念:

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

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

java反射機制功能:

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

在運行時構造任何類的對象;

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

在運行時調用任意對象的方法;

生成動態代理;

反射的優缺點:

優勢:

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

缺點:

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

Java反射機制類:

java.lang.Class //類
java.lang.reflect.Constructor //構造方法
java.lang.reflect.Field //類的成員變量
java.lang.reflect.Method //類方法
java.lang.reflect.Modifier //訪問權限

反射的應用場景:

模塊化開發,通過反射調用對應的字節碼;

動態代理設計模式

Spring和hibernate框架等

一個結合注解的框架,如Retrofit

例子:

JDBC編程中,加載數據庫驅動時應用反射機制;

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

獲取類對象的三種方法

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

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

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

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

3.類名class,例如:

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

可通過類對象獲取的信息

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

獲取方法的方法名和參數

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

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

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产第六页 | 国产91一区二这在线播放 | 91在线免费公开视频 | 看全大色黄大色黄大片一级爽 | 日韩欧美一区二区在线观看 | 全免费一级午夜毛片 | 一级无毛片 | 西西做人爱免费视频 | 国产第九页 | 亚洲欧美人成人综合在线50p | 国产成人精品午夜在线播放 | 免费一级欧美大片久久网 | 中文字幕 亚洲一区 | 97精品国产手机 | jizzjiz熟丰满老妇日本 | 538在线视频二三区视视频 | 久久综合草 | 免费观看黄a一级视频日本 免费观看黄色 | 天天色天天操天天 | 四虎国产精品永久在线播放 | 亚洲欧美精品中文字幕 | 久久精品国产99国产精品亚洲 | 男人叼女人的痛爽视频免费 | 亚洲精品一区二区久久这里 | 国产乱码 | 久久这里只有精品18 | 97在线观看免费版 | 亚洲国产精久久小蝌蚪 | 亚洲国产精品a在线 | 久久久久网站 | 久久精品免费 | 国产乱人视频在线播放不卡 | 亚洲国产欧美国产第一区二区三区 | 天天干干干干 | 五月综合激情久久婷婷 | 亚洲精品一区二区三区在 | 精品久久久久久久高清 | 9久久这里只有精品国产 | 69性影院在线观看国产精品87 | 97色偷偷9999www | 97视频在线观看视频在线精品 |