大战熟女丰满人妻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在線學習,里面的課程內容細致全面,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助哦。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美综合国产 | 天天干天天上 | 蕾丝视频在线看片国产 | 亚洲综合视频一区 | 日韩在线国产精品 | 午夜国产精品久久久久 | 欧美激情亚洲 | 亚洲欧美精品国产一区色综合 | 特级毛片在线 | 风流一代在线播放 | 国产96福利视频在线观看 | 一一级毛片 | 日韩精品一区二区三区中文3d | 色综合久久天天影视网 | 四虎影院在线免费 | 亚洲骚片| 精品福利一区 | 亚洲精品成人456在线播放 | 小说区图片区综合久久亚洲 | 97视频免费在线 | 天天射综合 | 久草视频免费在线播放 | 久久精品一 | 四虎精品成人免费影视 | 中文字幕久久久久久久系列 | 全免费a级毛片免费看不卡 全免费a级毛片免费看视频免 | 国产综合日韩伦理 | 婷婷综合五月 | 欧美激情亚洲激情 | 在线视频 中文字幕 | 亚洲精品一区 | 九九黄色网 | 亚洲日本va中文字幕婷婷 | 久久国产这里只精品免费 | 97视频在线免费 | 99热这里只有精品第一页 | 日韩孕交japanese孕交 | 一级女性全黄生活片看看 | 亚洲qingse中文字幕久久 | 亚洲我不卡| 好好的曰com久久 |