#1、類加載概述 Class文件由類裝載器裝載後,在JVM中將造成一份描述Class結構的元信息對象,經過該元信息對象能夠獲知Class的結構信息:如構造函數,屬性和方法等,Java容許用戶藉由這個Class相關的元信息對象間接調用Class對象的功能。java
虛擬機把描述類的數據從class文件加載到內存,並對數據進行校驗,轉換解析和初始化,最終造成能夠被虛擬機直接使用的Java類型,這就是虛擬機的類加載機制。數組
java安全沙箱(一)之ClassLoader雙親委派機制安全
#2、類加載工做機制 類裝載器就是尋找類的字節碼文件,並構造出類在JVM內部表示的對象組件。在Java中,類裝載器把一個類裝入JVM中,要通過如下步驟:框架
(1) 裝載:查找和導入Class文件; (2) 連接:把類的二進制數據合併到JRE中; (a)校驗:檢查載入Class文件數據的正確性; (b)準備:給類的靜態變量分配存儲空間; (c)解析:將符號引用轉成直接引用; (3) 初始化:對類的靜態變量,靜態代碼塊執行初始化操做
#3、類加載方式 一、命令行啓動應用時候由JVM初始化加載
二、經過Class.forName()方法動態加載
三、經過ClassLoader.loadClass()方法動態加載函數
#4、反射 Java反射機制是在運行狀態中,對於任意一個類,都可以知道這個類的全部屬性和方法,對於任意一個對象,都可以調用它的任意一個方法和屬性,這種動態獲取的信息以及動態調用對象的方法的功能。工具
主要提供瞭如下功能: 在運行時判斷任意一個對象所屬的類,在運行時構造任意一個類的對象,在運行時判斷任意一個類所具備的成員變量和方法,在運行時調用任意一個對象的方法,生成動態代理。ui
利用Reflection APIs取得任何已知名稱的類的內部信息,包括:package、 type parameters、 superclass、 implemented interfaces、 inner classes、 outer classes、 fields、 constructors、 methods、 modifiers等,並能夠在執行的過程當中,動態生成instances、變動fields內容或喚起methods。.net
// 根據構造函數的參數,返回一個具體的具備public屬性的構造函數
Constructor getConstructor(Class[] params)命令行
// 返回全部具備public屬性的構造函數數組
Constructor getConstructors()代理
// 根據構造函數的參數,返回一個具體的構造函數(不分public和非public屬性)
Constructor getDeclaredConstructor(Class[] params)
// 返回該類中全部的構造函數數組(不分public和非public屬性)
Constructor getDeclaredConstructors()
// 根據方法名和參數,返回一個具體的具備public屬性的方法 Method getMethod(String name, Class[] params)
// 返回全部具備public屬性的方法數組 Method[] getMethods()
// 根據方法名和參數,返回一個具體的方法(不分public和非public屬性) Method getDeclaredMethod(String name, Class[] params)
// 返回該類中的全部的方法數組(不分public和非public屬性) Method[] getDeclaredMethods()
// 根據變量名,返回一個具體的具備public屬性的成員變量 Field getField(String name)
// 返回具備public屬性的成員變量的數組 Field[] getFields()
// 根據變量名,返回一個成員變量(不分public和非public屬性) Field getDeclaredField(String name)
// 返回全部成員變量組成的數組(不分public和非public屬性) Field[] getDelcaredFields()
#5、註解 Annotation實際上是一種接口。經過Java的反射機制相關的API來訪問annotation信息。相關類(框架或工具中的類)根據這些信息來決定如何使用該程序元素或改變它們的行爲。
Annotation是不會影響程序代碼的執行,不管annotation怎麼變化,代碼都始終如一地執行。 Java語言解釋器在工做時會忽略這些annotation,所以在JVM中這些annotation是「不起做用」的,只能經過配套的工具才能對這些annontaion類型的信息進行訪問和處理。
Annotation與interface的異同:
Annotation類型又與接口有着近之處: