中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Java反射獲取實例的速度對比

發布時間:2020-10-30 17:24:38 來源:億速云 閱讀:199 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關Java反射獲取實例的速度對比,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

  public static void main(String[] args) {
    try {
      int MAX = 100000;
      for (int count = 0; count < 50; count++) {
        System.out.println("====第" + count+"次");
 
        long s1 = System.currentTimeMillis();
        for (int i = 0; i < MAX; i++) {
          Person o = (Person)Class.forName("com.qingtai.domin.Person").newInstance();
        }
        long e1 = System.currentTimeMillis();
        System.out.println("1_duration:" + (e1 - s1));
 
        long s2 = System.currentTimeMillis();
        Class clazz = Class.forName("com.qingtai.domin.Person");
        for (int i = 0; i < MAX; i++) {
          Person person = (Person) clazz.newInstance();
        }
        long e2 = System.currentTimeMillis();
        System.out.println("2_duration:" + (e2 - s2));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

輸出:

====第39次 1_duration:72 2_duration:3 ====第40次 1_duration:79 2_duration:12 ====第41次 1_duration:92 2_duration:8 ====第42次 1_duration:80 2_duration:5

結論:

Map的value不存儲全路徑名,在初始化的時候Map的value直接存儲Class對象,在反射過程中速度提升很大。

補充知識:java反射獲取類實例并調用私有方法

我就廢話不多說了,大家還是直接看代碼吧~

public class TestReflect {//測試類
 
 public void mPublic() {//訪問權限最大
 System.out.println("public run");
 }
 
 protected void mProtected() {//同包下才能訪問(實驗對象)
 System.out.println("protected run");
 }
 
 private void mPrivate() {//只有本類中才能訪問(實驗對象)
 System.out.println("private run");
 } 
}
 public static void main(String[] args) throws Exception {
 Class<&#63;> class1 = null;
 // 反射獲取類實例,用的最多的就是jdbc獲取驅動的時候就是用Class.forName("xxx");
 // 一般采用這種形式
 class1 = Class.forName("com.xxx.TestReflect");
 // class1 = new TestReflect().getClass();
 // class1 = TestReflect.class;
 
 // 類實例化,到這里就可以訪問TestReflect類的public屬性的成員方法和成員變量了
 TestReflect tr = (TestReflect) class1.newInstance();
 
 // 通過java.lang.Class類得到一個Method對象
 // api中java.lang.Class.getDeclaredMethod方法介紹
 // 返回一個 Method 對象,該對象反映此 Class 對象所表示的類或接口的指定已聲明方法。
   Method method = class1.getDeclaredMethod("mPrivate");
   Method method1 = class1.getDeclaredMethod("mProtected");
   
   //將此對象的 accessible 標志設置為指示的布爾值。
 //值為 true 則指示反射的對象在使用時應該取消 Java 語言訪問檢查。
 //值為 false 則指示反射的對象應該實施 Java 語言訪問檢查。
   method.setAccessible(true); 
   method1.setAccessible(true);
   
   // 調用該方法
   method.invoke(tr);
   method1.invoke(tr);
 }

以上就是Java反射獲取實例的速度對比,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿克| 肇庆市| 洛阳市| 平泉县| 思茅市| 琼结县| 衡南县| 右玉县| 湘潭县| 天镇县| 和林格尔县| 广东省| 进贤县| 玉山县| 全椒县| 许昌县| 通许县| 新宁县| 仪征市| 启东市| 临猗县| 乐都县| 都匀市| 望江县| 农安县| 孝义市| 德令哈市| 天峨县| 东辽县| 岚皋县| 南充市| 三明市| 仁布县| 长海县| 衡东县| 西贡区| 寿宁县| 淳化县| 石景山区| 惠来县| 陆川县|