精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

反射必殺技:深入了解Class類,讓你一通百通

開發 后端
孟子曰:得人心者得天下。而在 Java 中,這個「人心」就是 Class 類,獲取到 Class 類我們就可以為所欲為之為所欲為。下面讓我們深入「人心」,去探索 Class 類的原理。

1. Class 類的原理

孟子曰:得人心者得天下。而在 Java 中,這個「人心」就是 Class 類,獲取到 Class 類我們就可以為所欲為之為所欲為。下面讓我們深入「人心」,去探索 Class 類的原理。

[[287309]]

首先了解 JVM 如何構建實例。

1.1 JVM 構建實例

JVM:Java Virtual Machine,Java 虛擬機。在 JVM 中分為棧、堆、方法區等,但這些都是 JVM 內存,文中所描述的內存指的就是 JVM 內存。.class 文件是字節碼文件,是通過 .java 文件編譯得來的。

知道上面這些內容,我們開始創建實例。我們以創建 Person 對象舉例:

  1. Person p = new Person() 

簡簡單單通過 new 就創建了對象,那流程是什么樣的呢?見下圖: 

反射必殺技:深入了解Class類,讓你一通百通

這也太粗糙了一些,那在精致一下吧。 

反射必殺技:深入了解Class類,讓你一通百通

同志們發現沒有,其實這里還是有些區別的,我告訴你區別是下面的字比上面多,你會打我不(別打我臉)。

粗糙的那個是通過 new 創建的對象,而精致的是通過 ClassLoader 操作 .class 文件生成 Class 類,然后創建的對象。

其實通過 new 或者反射創建實例,都需要 Class 對象。

1.2 .class 文件

.class 文件在文章開頭講過,是字節碼文件。.java 是源程序。Java 程序是跨平臺的,一次編譯到處執行,而編譯就是從源文件轉換成字節碼文件。

字節碼無非就是由 0 和 1 構成的文件。

有如下一個類: 

反射必殺技:深入了解Class類,讓你一通百通

通過 vim 查看一下字節碼文件: 

反射必殺技:深入了解Class類,讓你一通百通

這啥玩意,看不懂。咱也不需要看懂,反正 JVM 對 .class 文件有它自己的讀取規則。

1.3 類加載器

還記得上面的精致圖中,我們知道是通過類加載器把 .class 文件加載到內存中。具體的類加載器內容,我會另寫一篇文章講解(寫完鏈接會更新到這里)。但是核心方法就是 loadClass(),只需要告訴它要加載的 name,它就會幫你加載:

  1. protected Class<?> loadClass(String name, boolean resolve) 
  2.     throws ClassNotFoundException 
  3.     synchronized (getClassLoadingLock(name)) { 
  4.         // 1.檢查類是否已經加載 
  5.         Class<?> c = findLoadedClass(name); 
  6.         if (c == null) { 
  7.             long t0 = System.nanoTime(); 
  8.             try { 
  9.                 // 2.尚未加載,遵循父優先的等級加載機制(雙親委派機制) 
  10.                 if (parent != null) { 
  11.                     c = parent.loadClass(namefalse); 
  12.                 } else { 
  13.                     c = findBootstrapClassOrNull(name); 
  14.                 } 
  15.             } catch (ClassNotFoundException e) { 
  16.                 // ClassNotFoundException thrown if class not found 
  17.                 // from the non-null parent class loader 
  18.             } 
  19.  
  20.             if (c == null) { 
  21.                 // 3.如果還沒有加載成功,調用 findClass() 
  22.                 long t1 = System.nanoTime(); 
  23.                 c = findClass(name); 
  24.  
  25.                 // this is the defining class loader; record the stats 
  26.                 sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0); 
  27.                 sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1); 
  28.                 sun.misc.PerfCounter.getFindClasses().increment(); 
  29.             } 
  30.         } 
  31.         if (resolve) { 
  32.             resolveClass(c); 
  33.         } 
  34.         return c; 
  35.     } 
  36.  
  37. // 需要重寫該方法,默認就是拋出異常 
  38. protected Class<?> findClass(String name) throws ClassNotFoundException { 
  39.     throw new ClassNotFoundException(name); 
  1. 類加載器加載 .class 文件主要分位三個步驟
  2. 檢查類是否已經加載,如果有就直接返回
  3. 當前不存在該類,遵循雙親委派機制,加載 .class 文件

上面兩步都失敗,調用 findClass()

因為 ClassLoader 的 findClass 方法默認拋出異常,需要我們寫一個子類重新覆蓋它,比如:

  1. @Override 
  2.     protected Class<?> findClass(String name) throws ClassNotFoundException { 
  3.         try { 
  4.             // 通過IO流從指定位置讀取xxx.class文件得到字節數組 
  5.             byte[] datas = getClassData(name); 
  6.             if (null == datas){ 
  7.                 throw new ClassNotFoundException("類沒有找到:" + name); 
  8.             } 
  9.             // 調用類加載器本身的defineClass()方法,由字節碼得到 class 對象 
  10.             return defineClass(name, datas, 0, datas.length); 
  11.         }catch (IOException e){ 
  12.             throw new ClassNotFoundException("類沒有找到:" + name); 
  13.         } 
  14.     } 
  15.  
  16.     private byte[] getClassData(String name) { 
  17.         return byte[] datas; 
  18.     } 

defineClass 是通過字節碼獲取 Class 的方法,是 ClassLoader 定義的。我們具體不知道如何實現的,因為最終會調用一個 native 方法:

  1. private native Class<?> defineClass0(String name, byte[] b, int offint len, 
  2.                                          ProtectionDomain pd); 
  3.  
  4.     private native Class<?> defineClass1(String name, byte[] b, int offint len, 
  5.                                          ProtectionDomain pd, String source); 
  6.  
  7.     private native Class<?> defineClass2(String name, java.nio.ByteBuffer b, 
  8.                                          int offint len, ProtectionDomain pd, 
  9.                                          String source); 

總結下類加載器加載 .class 文件的步驟:

  • 通過 ClassLoader 類中 loadClass() 方法獲取 Class
  • 從緩存中查找,直接返回
  • 緩存中不存在,通過雙親委派機制加載
  • 上面兩步都失敗,調用 findClass()通過 IO 流從指定位置獲取到 .class 文件得到字節數組調用類加載器 defineClass() 方法,由字節數組得到 Class 對象

1.4 Class 類

.class 文件已經被類加載器加載到內存中并生成字節數組,JVM 根據字節數組創建了對應的 Class 對象。

接下來我們來分析下 Class 對象。 

反射必殺技:深入了解Class類,讓你一通百通

我們知道 Java 的對象會有下面的信息:

  1. 權限修飾符
  2. 類名和泛型信息
  3. 接口
  4. 實體
  5. 注解
  6. 構造函數
  7. 方法

這些信息在 .class 文件以 0101 表示,最后 JVM 會把 .class 文件的信息通過它的方式保存到 Class 中。

在 Class 中肯定有保存這些信息的字段,我們來看一下: 

反射必殺技:深入了解Class類,讓你一通百通

Class 類中用 ReflectionData 里面的字段來與 .class 的內容映射,分別映射了字段、方法、構造器和接口。 

反射必殺技:深入了解Class類,讓你一通百通

通過 annotaionData 映射了注解數據,其它的就不展示了,大家可以自行打開 IDEA 查看下 Class 的源碼。

那我們看看 Class 類的方法

1.4.1 構造器 

反射必殺技:深入了解Class類,讓你一通百通

Class 類的構造器是私有的,只能通過 JVM 創建 Class 對象。所以就有了上面通過類加載器獲取 Class 對象的過程。

1.4.2 Class.forName 

反射必殺技:深入了解Class類,讓你一通百通

Class.forName() 方法還是通過類加載器獲取 Class 對象。

1.4.3 newInstance 

反射必殺技:深入了解Class類,讓你一通百通

newInstance() 的底層是返回無參構造函數。

2. 總結

我們來梳理下前面的知識點:

反射的關鍵點就是獲取 Class 類,那系統是如何獲取到 Class 類?

是通過類加載器 ClassLoader 將 .class 文件通過字節數組的方式加載到 JVM 中,JVM 將字節數組轉換成 Class 對象。那類加載器是如何加載的呢?

  • 通過 ClassLoader 的 loadClass() 方法
  • 從緩存中查找,直接返回
  • 緩存中不存在,通過雙親委派機制加載
  • 上面兩步都失敗,調用 findClass()通過 IO 流從指定位置獲取到 .class 文件得到字節數組調用類加載器 defineClass() 方法,由字節數組得到 Class 對象

Class 類的構造器是私有的,所以需要通過 JVM 獲取 Class。

Class.forName() 也是通過類加載器獲取的 Class 對象。newInstance 方法的底層也是返回的無參構造函數。

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-07-18 06:48:03

2010-05-14 13:05:57

2014-04-22 10:50:31

統一通信UCBYOD

2018-09-21 14:32:00

iPaas云應用部署

2011-06-27 14:56:49

SEO

2010-08-24 14:57:33

外企職場

2010-01-06 17:18:54

Linux常用軟件

2025-01-23 08:38:46

2013-05-10 09:23:14

iPaaS混合云集成云集成

2024-08-09 12:11:07

2021-02-02 10:55:09

等級保護2.0信息安全網絡安全

2010-08-11 16:43:05

職場

2009-07-22 15:02:18

2010-05-12 18:04:00

統一通信服務

2010-11-18 10:52:54

統一通信

2012-10-18 13:48:31

統一通信UC

2025-07-29 08:53:19

2009-10-13 16:38:04

強行關閉VMware虛

2010-05-21 12:33:28

統一通信技術平臺

2023-04-07 17:44:43

點贊
收藏

51CTO技術棧公眾號

日韩欧美美女在线观看| 亚洲精品久久久久久动漫器材一区 | 97超碰人人干| 久久丝袜视频| 色综合久久久久综合体桃花网| 任我爽在线视频精品一| 一区二区三区亚洲视频| 欧美三级小说| 亚洲女人天堂成人av在线| 日本激情综合网| 欧洲黄色一区| 久久先锋影音av| 国产精品久久综合av爱欲tv| 欧美黄色aaa| 林ゆな中文字幕一区二区| 在线视频亚洲一区| 欧美在线观看黄| 男女视频在线观看| 久久国产精品72免费观看| 欧美激情三级免费| 日本高清黄色片| aiss精品大尺度系列| 中文字幕在线观看播放| 另类成人小视频在线| 久久久久久久影院| 特黄一区二区三区| 欧美在线观看视频一区| 亚洲韩国欧洲国产日产av| 欧洲美女亚洲激情| 97人人做人人爽香蕉精品| 福利一区视频在线观看| 国产成人免费av一区二区午夜| japansex久久高清精品| 亚洲国产成人av网| 日本高清xxxx| 深夜福利在线视频| 成人ar影院免费观看视频| 成人中文字幕在线观看| 国产+人+亚洲| 久久香蕉精品| 羞羞的视频在线看| 五月天婷婷综合网| 日本大片免费看| 欧美日本韩国国产| jizz国产免费| 日本黄大片一区二区三区| 男人天堂新网址| 国产熟女一区二区三区四区| 奇米在线7777在线精品| 日韩av片免费在线观看| 日韩av一区二区在线播放| 欧美日韩专区| 久久精品夜色噜噜亚洲aⅴ| 日本久久久久亚洲中字幕| 亚洲国产精一区二区三区性色| 午夜久久免费观看| 日韩在线欧美在线国产在线| 国产黄色大片免费看| 欧美理论视频| 中文字幕欧美精品日韩中文字幕| 亚洲中文字幕无码av| 开心激情综合| 亚洲日本aⅴ片在线观看香蕉| 魔女鞋交玉足榨精调教| 国产调教一区二区三区| 欧美日韩爱爱| 午夜婷婷国产麻豆精品| 激情成人开心网| a'aaa级片在线观看| 无码av免费一区二区三区试看| 分分操这里只有精品| 男人天堂视频在线观看| 日韩欧美在线视频日韩欧美在线视频| 日韩在线综合网| 在线免费看h| 色综合久久久久久久久久久| 国产理论在线播放| 欧美性aaa| 91精品国产综合久久久久久久| 久久出品必属精品| 精品国产乱子伦| 136导航精品福利| 亚洲国产欧美在线成人app| 国产三级国产精品| 国产日产精品一区二区三区四区的观看方式 | 精品女同一区二区三区在线观看| 欧美这里有精品| 红桃视频 国产| 99久热这里只有精品视频免费观看| 亚洲福利视频二区| 韩国三级hd中文字幕| 先锋资源久久| 欧美亚洲另类视频| 亚洲一区中文字幕永久在线| 国产成人高清视频| 欧美最大成人综合网| 九七久久人人| 精品色蜜蜜精品视频在线观看| 日韩精品免费播放| 五月亚洲婷婷| 亚洲人成绝费网站色www| 欧美大片xxxx| 久久福利精品| 国产精品久久精品国产 | 99国产精品久久久久久久久久久 | 日本wwww视频| 99re66热这里只有精品4| 日韩视频一区二区三区| 国产成人无码一区二区在线观看| 国产韩日影视精品| 88xx成人精品| www.成人精品| 国产精品麻豆久久久| 无罩大乳的熟妇正在播放| 亚洲tv在线| 亚洲欧洲在线免费| 久久一二三四区| 韩日av一区二区| 日韩精品一区二区三区四区五区 | 亚洲h在线观看| 日本黄色福利视频| 欧美亚洲高清| 国产999在线观看| 香港一级纯黄大片| 亚洲成人资源在线| 亚洲少妇中文字幕| 欧美成人首页| 91精品国产综合久久男男 | 久久久久久久免费视频了| 女人帮男人橹视频播放| 国产精品一区二区精品| 久久精品国产96久久久香蕉| 国产精品无码一区| 国产亚洲综合在线| 成年人观看网站| 欧美日韩导航| 97精品伊人久久久大香线蕉| 国产 日韩 欧美 综合| 亚洲精品视频观看| 中文字幕av一区二区三区人妻少妇| 欧美www视频在线观看| 国产精品成人v| 国产精品久久久久一区二区国产| 一本一道波多野结衣一区二区| 久久久久麻豆v国产精华液好用吗| 中文字幕一区二区三三| 91欧美精品成人综合在线观看| 成全电影播放在线观看国语| 欧美午夜美女看片| 爱爱的免费视频| 亚洲在线国产日韩欧美| 国产一区精品在线| 日本在线播放一二三区| 日韩av在线免费观看| 免费看日韩毛片| 97se狠狠狠综合亚洲狠狠| 色综合久久久久无码专区| 99精品国产一区二区三区2021| 久久亚洲精品一区| 国产浮力第一页| 亚洲一二三四区| 182在线视频| 亚洲影院免费| 一区二区三区在线观看www| 国产 日韩 欧美| 欧美极品欧美精品欧美视频| 天天色综合av| 在线观看日韩国产| 91n在线视频| 国产高清成人在线| 久久综合色视频| 欧洲毛片在线视频免费观看| 国产日韩欧美自拍| 欧美wwww| 亚洲网站在线看| av老司机久久| 狠狠躁夜夜躁人人躁婷婷91 | 日韩综合网站| 高清视频在线观看一区| 韩国美女久久| 久久精品国产亚洲精品| 色哟哟中文字幕| 欧洲av一区二区嗯嗯嗯啊| 91嫩草|国产丨精品入口| 成人久久18免费网站麻豆 | 97人人做人人爽香蕉精品| 久久这里有精品| 手机福利在线| 91精品国产色综合久久| 国产精品美女毛片真酒店| 久久日一线二线三线suv| 亚洲午夜激情影院| aa级大片欧美三级| 欧美色图第一页| 六十路息与子猛烈交尾| 久久电影网电视剧免费观看| xxxx18hd亚洲hd捆绑| 日韩国产一区二区三区| 国产91亚洲精品一区二区三区| 人人鲁人人莫人人爱精品| 欧美俄罗斯性视频| 国产乱视频在线观看| 欧美xxxxxxxxx| 中文字幕一区二区三区四区视频| 亚洲第一在线综合网站| 少妇视频在线播放| 97se亚洲国产综合自在线| 亚洲色图欧美自拍| 久久青草久久| 欧美精品卡一卡二| 亚洲草久电影| 日韩国产精品一区二区三区| 激情小说亚洲色图| 91国产丝袜在线放| 97久久网站| 国产91色在线免费| 国产色播av在线| 欧美久久精品午夜青青大伊人| 日韩a在线观看| 精品少妇一区二区三区| 97人妻人人澡人人爽人人精品| 大伊人狠狠躁夜夜躁av一区| 国产亚洲欧美精品久久久www| 国产精品素人一区二区| 久久久久久久久久久久| 97se狠狠狠综合亚洲狠狠| 国产精品99精品无码视亚| 精品一区二区三区免费毛片爱| 丁香婷婷激情网| 亚洲欧美日韩专区| 各处沟厕大尺度偷拍女厕嘘嘘| 伊人成人网在线看| 777久久精品一区二区三区无码 | 国产精品网址| 国产成人亚洲欧美| 亚洲国产视频二区| 亚洲自拍欧美另类| 国产日韩欧美中文在线| 国产综合视频在线观看| 欧美成人福利| 成人av番号网| 欧美大片91| 亚洲欧美色图片| 日本成人免费在线观看| 国产欧美综合在线| 成年人在线免费看片| 国产日产精品1区| 97人妻人人揉人人躁人人| 国产三级一区二区三区| 亚洲综合欧美综合| 国产精品乱码久久久久久| 影音先锋男人在线| 国产精品女人毛片| 三级在线观看免费大全| 亚洲品质自拍视频| 欧美日韩精品在线观看视频 | 成人黄色片免费| 欧美激情精品久久久六区热门| wwwjizzjizzcom| 在线观看日韩av电影| 日本在线xxx| 98色花堂精品视频在线观看| 欧美午夜寂寞影院| 一级特黄aaa| 日韩欧美亚洲另类制服综合在线| 丰满肉肉bbwwbbww| 亚洲欧美日韩区| av在线首页| 久久精品国产一区二区三区| 亚洲电影视频在线| 7m第一福利500精品视频| 欧美色999| 成人免费淫片aa视频免费| 7m精品国产导航在线| 美女黄毛**国产精品啪啪| 欧美精品色图| 国产一级大片免费看| 免费日韩一区二区| 中文字幕第一页在线视频| 暴力调教一区二区三区| 五月天综合视频| 亚洲精品高清在线| 性欧美在线视频| 欧美亚洲色图校园春色| 日韩欧美第二区在线观看| 亚洲一区二区日韩| 亚洲中文字幕无码专区| 老司机精品视频导航| 大桥未久恸哭の女教师| 欧美国产亚洲另类动漫| 激情五月婷婷小说| 色94色欧美sute亚洲线路一ni| 国产三级小视频| 日韩精品视频在线观看免费| 成人在线网址| 日本最新高清不卡中文字幕| 日本免费一区二区三区视频| 欧美极品一区| 欧美天天视频| 日本三级黄色网址| 26uuu成人网一区二区三区| 卡通动漫亚洲综合| 在线免费观看一区| 视频一区 中文字幕| 久久精品视频网站| 在线日本欧美| 综合国产在线视频| 国产精品熟女久久久久久| 亚洲精品久久久久久久久| 国产剧情在线| 国产精品日韩专区| 久9久9色综合| 尤物av无码色av无码| 国产精一区二区三区| 日本免费www| 欧美日在线观看| 国产综合在线播放| 欧美超级免费视 在线| 69堂精品视频在线播放| 欧美12av| 国产精品综合色区在线观看| 色婷婷狠狠18禁久久| 国产精品国产三级国产aⅴ原创| 久久精品视频5| 日韩高清a**址| 高清在线视频不卡| 国产精品sss| 国产一区观看| 免费黄色av网址| 亚洲精品社区| 精品一卡二卡三卡四卡日本乱码| 婷婷精品进入| 蜜臀一区二区三区精品免费视频 | 美女的胸无遮挡在线观看| 97人人模人人爽人人喊38tv| 日韩欧美一区二区三区在线视频| av无码精品一区二区三区| 91免费看片在线观看| 日韩毛片在线视频| 亚洲第一视频网| 96av在线| 久久免费视频1| 久久综合婷婷| 中文字幕在线观看免费高清 | 欧美在线一区二区三区四| 开心激情综合| 欧美三级一级片| 久久婷婷色综合| 亚洲国产精品无码久久久| 亚洲人成五月天| 福利一区二区免费视频| 五月天丁香综合久久国产| 免费不卡在线观看| 成人做爰视频网站| 日韩午夜三级在线| av影片在线| 你懂的视频在线一区二区| 日韩vs国产vs欧美| sm捆绑调教视频| 日韩一区二区免费在线观看| 亚洲h片在线看| 国产色综合一区二区三区| 国产精品综合| 日韩黄色中文字幕| 欧美一区二区在线播放| 国产美女一区视频| 激情视频一区二区| 日本aⅴ亚洲精品中文乱码| 国内毛片毛片毛片毛片毛片| 日韩亚洲欧美在线观看| av中文字幕在线观看第一页| 欧美亚州在线观看| 精品写真视频在线观看| 国产亚洲精品av| 国产午夜精品全部视频在线播放 | 日本免费新一区视频| 久久久久人妻一区精品色| 精品日韩一区二区三区 | 亚洲无线视频| 在线免费观看成年人视频| 欧美色综合天天久久综合精品| www在线视频| 欧美二区在线看| 精品一区二区三区不卡| 1级黄色大片儿| 日日摸夜夜添一区| 国产精品巨作av| 日本xxxx黄色| 午夜一区二区三区在线观看| 在线毛片网站| 九九99玖玖| 国内成人免费视频| 亚洲GV成人无码久久精品| 久久精品国产91精品亚洲| 亚洲三级网页| 老女人性生活视频| 欧美午夜精品免费| 久草在线中文最新视频| 成年人免费观看的视频| 久久奇米777|