一 、類的加載
類的加載由類加載器完成,類加載器通常由JVM提供,這些類加載器也是程序運行的基礎,JVM提供的類加載器通常被稱爲系統類加載器。除此之外,開發者可以通過繼承ClassLoader基礎來創建自己的類加載器。
- 從本地文件系統加載class文件
- 從jar包加載class文件,(jdbc,引入其它的jar包)
- 通過網絡加載class文件
- 對java源文件動態編譯, 並執行加載
二、類的連接
當類被加載之後,系統爲之生成一個對應的Class對象,接着將會
三、獲取Class對象
- 使用Class類的forName(String clazzName)靜態方法。例如,Person.class將會返回Person類對應的Class對象。
- 調用某個類的class屬性來獲取該類對應的Class對象。例如,Person.class將會返回Person類對應的Class對象。
- 調用某個能夠的getClass()方法。該方法是java.lang.Object類中的一個方法,所以所有的JAVA對象都可以調用該方法,該方法將會返回該對象所屬類對應的Class對象。
對於第一種方式和第二種方式都是直接根據類來取得該類的Class對象,相比之下,第二種方式有如下兩種優勢。
- 代碼更安全。程序在編譯階段就可以檢查需要訪問的Class對象是否存在。
- 程序性能更好。因爲這種方式無須調用方法,所以性能更好。
也就是說,能使用第二種方式,就不使用第一種方法。
四、從Class中獲取信息
獲取Classc對應類所包含的構造器
序號 | 方法 | 說明 |
---|---|---|
1 | Constructor<T> getConstructor(Class<?>… parameterTypes) | 獲取指定public的構造器 |
2 | Constructor[]<T> getConstructors() | 獲取全部public的構造器 |
3 | Constructor<T> getDeclaredConstructor(Class<?>… parameterTypes) | 獲取指定的構造器 |
4 | Constructor[]<T> getDeclaredConstructors() | 獲取全部的構造器 |