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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日本色吧 | 色综合久久中文字幕综合网 | 亚洲精品久一区 | 久久这里有精品视频任我鲁 | 精品综合久久久久久97超人 | 波多野结中文字幕在线69视频 | 免费香蕉一区二区在线观看 | 一本到在线观看视频不卡 | 亚洲成人中文 | 香蕉视频黄在线观看 | 日本一级特黄毛片高清视频 | 亚洲国产日韩欧美高清片a 亚洲国产日韩欧美一区二区三区 | 亚洲精品国产字幕久久不卡 | 精品视频一区二区三三区四区 | 精品亚洲成a人在线观看 | 中文字幕精品一区二区日本大胸 | 色综合色狠狠天天久久婷婷基地 | 四虎影院在线看 | 国产成人免费午夜性视频 | 9999人体做爰大胆 | 精品国免费一区二区三区 | 国产国产人免费观看在线视频 | 日本三级做a全过程在线观看 | 国产在线观看中文字幕 | 国产精品岛国久久久久 | 国产免费一区二区三区在线观看 | 亚洲国产福利精品一区二区 | 久久97精品久久久久久久看片 | 精品哟哟哟国产在线观看不卡 | 亚洲精品久久中文字幕 | 色综合久久久 | 97色在线播放| 玖玖玖精品视频免费播放 | 日本高清视频一区二区 | 亚洲激情小视频 | 国产精品爱久久 | 欧美成人四级hd版 | 天天做天天爱夜夜爽毛片毛片 | 九九精品视频在线免费观看 | 国产精品国产三级国产 | 久久久久免费精品视频 |