精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩精品一区二区三区中文不卡| 91欧美一区二区| 日韩在线播放视频| 中文字幕久久久久久久| av在线网页| 91丨九色porny丨蝌蚪| 国产精品久久二区| 欧美三根一起进三p| 亚洲毛片免费看| 欧美精品乱码久久久久久按摩| 精品免费久久久久久久| 少妇无码一区二区三区| 麻豆传媒一区二区三区| 久久免费精品视频| 韩国女同性做爰三级| 警花av一区二区三区| 色综合天天综合狠狠| 中文字幕中文字幕99| 香蕉久久一区二区三区| 国内成人精品2018免费看| 97国产精品人人爽人人做| 四虎国产成人精品免费一女五男| 第一区第二区在线| 欧美情侣在线播放| 国产高清精品在线观看| 亚洲综合图区| 国产精品色哟哟网站| 久久精品五月婷婷| www.av日韩| 九九视频精品免费| 日本亚洲欧洲色| 国产亚洲欧美精品久久久久久| 日韩免费一区| 亚洲毛茸茸少妇高潮呻吟| 少妇献身老头系列| 在线免费成人| 欧美丝袜丝交足nylons图片| 国产亚洲综合视频| 污片视频在线免费观看| 成人欧美一区二区三区小说| 日本日本精品二区免费| 日批视频在线播放| 高清不卡一区二区在线| 亚洲va电影大全| 亚洲一区二区天堂| 日韩中文字幕区一区有砖一区| 88xx成人精品| 日本熟妇一区二区| 精品福利电影| 欧美黑人极品猛少妇色xxxxx| 疯狂撞击丝袜人妻| 久久中文字幕av| 亚洲色图第三页| 亚洲一区二区三区蜜桃| 麻豆一区二区麻豆免费观看| 精品国产凹凸成av人导航| 免费看的av网站| 国产精品高清一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 欧美在线一级视频| 欧美日韩精品区| 亚洲精品婷婷| 26uuu久久噜噜噜噜| wwwxxx亚洲| 欧美专区18| 国产精品678| 成人黄色免费网| 捆绑调教美女网站视频一区| 成人在线国产精品| 国产精品国产一区二区三区四区| 国产最新精品免费| 91久久久一线二线三线品牌| 亚洲国产一二三区| 99re66热这里只有精品3直播| 久久狠狠久久综合桃花| 视频一区二区三区在线看免费看| 久久久三级国产网站| 精品国产_亚洲人成在线| 深夜福利免费在线观看| 欧美激情资源网| 欧美aaa在线观看| 美足av综合网| 一本一道综合狠狠老| 久久撸在线视频| 免费精品一区| 日韩av在线免费| 超碰人人人人人人人| 欧美日韩蜜桃| 日产日韩在线亚洲欧美| 国产精品午夜福利| 不卡的av电影在线观看| 日韩免费电影一区二区| 宅男网站在线免费观看| 狠狠做深爱婷婷久久综合一区| 欧美一级裸体视频| 久久视频免费| 国产丝袜一区视频在线观看 | 禁果av一区二区三区| 日韩在线观看免费高清| 国产精品第二十页| 日韩**一区毛片| av一区二区三区免费| 邻居大乳一区二区三区| 亚洲欧美一区二区久久| 69堂免费视频| 国产精品一区二区精品| 精品亚洲一区二区三区四区五区| 羞羞在线观看视频| 亚洲全部视频| 91精品久久久久久久久久| 女人18毛片水真多18精品| 欧美国产成人精品| av在线观看地址| 国产精品一区二区免费福利视频| 亚洲国产精品福利| 中文国语毛片高清视频| 老鸭窝毛片一区二区三区| 3d动漫啪啪精品一区二区免费| 国产中文字幕在线观看| 亚洲国产一区二区a毛片| 性猛交ⅹ×××乱大交| 欧美有码在线| 欧美高清自拍一区| 又骚又黄的视频| 久久蜜桃一区二区| 无码人妻少妇伦在线电影| 日韩专区视频网站| 亚洲色图第三页| 奇米影视第四色777| 国产一区二区日韩精品| 亚洲韩国在线| 日韩欧美少妇| 亚洲精品美女久久| 久久久久久久久久久久久久久久久 | 久久精品国产欧美激情| 免费视频久久久| 99视频一区二区| 欧美一二三不卡| 久久爱www.| 久久好看免费视频| 在线不卡免费视频| 国产喷白浆一区二区三区| 凹凸国产熟女精品视频| 精品人人人人| 午夜欧美大片免费观看| 亚洲h视频在线观看| 亚洲精品久久7777| 91香蕉国产线在线观看| 亚洲h色精品| 91深夜福利视频| 国产最新在线| 69av一区二区三区| 国产老头老太做爰视频| 韩国成人福利片在线播放| 在线观看福利一区| 99精品国产九九国产精品| 久久精品久久久久久国产 免费| 亚洲综合精品在线| 中文字幕日韩欧美一区二区三区| 天天干天天玩天天操| 成人aaaa| 成人免费激情视频| 中文字幕在线观看网站| 日韩美女视频在线| 久青草免费视频| 91亚洲精品久久久蜜桃| 白嫩少妇丰满一区二区| 欧美日韩国产高清电影| 国产乱人伦真实精品视频| 麻豆91在线| 精品免费视频.| 天天操天天干视频| 久久精品欧美一区二区三区麻豆| 999在线免费视频| 999国产精品999久久久久久| 92裸体在线视频网站| 91在线三级| 国产亚洲精品久久久久久牛牛| 中日韩av在线| 亚洲久草在线视频| 日韩aaaaa| 日本va欧美va精品| 老司机午夜免费福利视频| 欧美三级电影在线| 国产精品久久久久久久久久| h片在线免费观看| 亚洲国产美女精品久久久久∴| 无码人妻丰满熟妇精品| 国产精品护士白丝一区av| 曰本三级日本三级日本三级| 亚洲在线一区| 男女啪啪的视频| 日韩在线影视| 91系列在线观看| 色黄视频在线观看| 精品激情国产视频| 五月激情婷婷综合| 欧美精品高清视频| 黄色片视频网站| 国产精品国模大尺度视频| 国产一级黄色录像| 九九国产精品视频| 日本网站免费在线观看| 91精品一区二区三区综合在线爱| 国产一区二区三区黄| 久久精品超碰| 欧美另类在线观看| 成人免费视频| 亚洲精品美女免费| 国内精品久久久久久久久久| 色94色欧美sute亚洲线路二| 久久久久久久久久久久久久久久久 | 91成人免费视频| 欧美特大特白屁股xxxx| 欧美多人乱p欧美4p久久| 成黄免费在线| 日韩精品视频在线| 国产aⅴ一区二区三区| 91国偷自产一区二区三区观看| 久久久久免费看| 中文字幕中文在线不卡住| 中文字幕日韩三级片| 国产麻豆精品在线观看| 国产又大又黄又粗又爽| 每日更新成人在线视频| 亚洲国产精品无码av| 天天做天天爱天天综合网| 欧美在线一二三区| 欧美一区二区三区红桃小说| 91精品久久久久久蜜桃| 激情中国色综合| 国产成人精品一区二区| 理论不卡电影大全神| 欧美日韩高清区| 久草中文在线观看| 视频在线观看一区二区| 粉嫩av在线播放| 日韩国产欧美精品在线| 天天操天天插天天射| 欧美精品免费视频| 中文字幕码精品视频网站| 日韩欧美第一页| 圆产精品久久久久久久久久久| 樱桃国产成人精品视频| 破处女黄色一级片| 国产精品免费免费| 阿v天堂2014| 欧美激情综合五月色丁香小说| 蜜桃av免费看| 国产亚洲一本大道中文在线| 免费黄色在线视频| 91色婷婷久久久久合中文| 亚洲av成人片无码| 成人aaaa免费全部观看| 天天插天天射天天干| 成人一级片网址| 国产视频精品视频| 成人一区在线看| 国产精品久久无码| 99久久婷婷国产| 中文字幕在线观看的网站| 91丨国产丨九色丨pron| av黄色在线免费观看| 日本一区二区三区在线不卡| 国产wwwwxxxx| 一区二区三区中文字幕精品精品| 麻豆一区产品精品蜜桃的特点| 一区二区三区四区蜜桃| 久久一级黄色片| 欧美日韩国产精品一区| 国产无人区码熟妇毛片多| 一本到一区二区三区| 欧美性猛交xxxx乱大交hd| 欧美日韩黄色一区二区| 国产裸体无遮挡| 精品动漫一区二区三区在线观看| 色一情一乱一区二区三区| 亚洲区免费影片| 91免费在线| 欧美成人激情图片网| 不卡av免费观看| 国产91色在线播放| 亚洲tv在线| 国产高清精品一区| 中日韩免视频上线全都免费| 亚洲最大色综合成人av| 欧美黄色大片网站| 国产精品后入内射日本在线观看| 蜜桃视频在线观看一区二区| 中国特级黄色片| 久久久青草青青国产亚洲免观| 欧美爱爱免费视频| 婷婷久久综合九色综合伊人色| 超碰在线观看91| 91精品国产色综合久久| 日本不卡免费播放| 精品国内产的精品视频在线观看| 草美女在线观看| 国产精品久久久亚洲| 成功精品影院| 亚洲v欧美v另类v综合v日韩v| 国产精品av久久久久久麻豆网| 欧美日韩在线不卡视频| 精品一区二区三区在线观看| 这里只有精品在线观看视频| 中文一区在线播放| 国产性xxxx高清| 91精品一区二区三区在线观看| 黑人操亚洲女人| 日韩一区二区福利| 蜜桃视频在线网站| 91免费国产视频| 国产精品最新| 黄色一级视频在线播放| 美女性感视频久久| chinese麻豆新拍video| 自拍av一区二区三区| 亚洲欧美一区二区三区在线观看| 日韩三级视频中文字幕| 午夜激情视频在线| 日本成熟性欧美| 99re6热只有精品免费观看| 亚洲国产成人不卡| 香蕉成人久久| 91九色蝌蚪porny| 亚洲欧美日韩电影| 真实的国产乱xxxx在线91| 亚洲精品短视频| 日韩精品卡一| 亚洲精品日韩激情在线电影| 日韩精品永久网址| 可以免费观看av毛片| 成人福利视频网站| 69av.com| 91精品久久久久久久91蜜桃| 成人精品一区二区| 日本精品一区二区三区在线| 国内毛片久久| wwwwww欧美| 国产馆精品极品| 182在线观看视频| 欧美日韩综合一区| av大片在线播放| 国产精品无码专区在线观看| 九色精品91| 激情网站五月天| 国产视频亚洲色图| 在线观看亚洲黄色| 一本色道久久综合狠狠躁篇的优点 | 国产精品天干天干在线综合| 无码人妻精品一区二区| 亚洲天堂av高清| 台湾佬成人网| 欧美日韩综合网| 日韩av午夜在线观看| 国产三级av在线播放| 91福利国产精品| 在线观看免费网站黄| 国产精品丝袜高跟| 欧美残忍xxxx极端| 国产又粗又长又爽又黄的视频| 日韩美女精品在线| 国产www视频| 高清视频欧美一级| 麻豆精品av| 欧美一级黄色影院| 中日韩av电影| 国产女人高潮的av毛片| 色综合久久精品亚洲国产| 国产+成+人+亚洲欧洲在线 | av手机在线观看| 久久涩涩网站| 日韩黄色片在线观看| 中文字幕资源站| 欧美一级黄色大片| 91资源在线观看| 日韩欧美视频一区二区三区四区| 奇米888四色在线精品| 久久免费看少妇高潮v片特黄| 精品国免费一区二区三区| 极品av在线| 日本一区二区三区www| 国产又黄又大久久| 久久精品视频久久| 亚洲欧美一区二区三区四区| 日本午夜精品久久久久| 黄色a级片免费看| 久久九九久久九九| 国产露脸国语对白在线| 国模吧一区二区| 成人中文视频| 亚洲日本久久久| 在线一区二区视频| 香蕉久久aⅴ一区二区三区| 久久久福利视频| 韩国精品免费视频| 中文人妻av久久人妻18| 超碰精品一区二区三区乱码| 欧洲vs亚洲vs国产| 中文字幕第三区|