对于反射的一些总结(一)
1.? Class類:??
1.1.?? 關于 Class 類的概述:????
??????? 我們要了解反射,首先就要了解 Class 這個類。接下來就先來了解一下Class類吧!
??????? Class 類的實例表示一個正在運行的 Java 應用程序的類和接口。例如:枚舉是一種類,注釋是一種接口。每個數組屬于被映射為 Class 類型的實例(對象)創建的一個類,所有具有相同元素類型和維數的數組都共享該 Class 對象。基本的 Java 類型(boolean、byte、char、short、int、long、float 和 double)和關鍵字 void 也表示為 Class 對象。
??????? Class 沒有公共構造方法。Class 對象是在類加載時由 Java 虛擬機以及通過調用類加載器中的 defineClass 方法自動構造的。我們可以通過這個Class 類型的對象來進行得到一些信息:某個類的數據成員名、方法和構造器、某個類到底實現了哪些接口。
對于上面說這么多總結而言,就是下面的幾句話:
對于每個類而言:
①? 、JRE 都為其保留一個不變的 Class 類型的對象。一個 Class 對象包含了特定某個類的有關信息。
②? 、Class 對象只能由系統建立對象。
③? 、一個類在 JVM 中只會有一個Class實例 每個類的實例都會記得自己是由哪個 Class 實例所生成。
1.2.?? 關于 Class 類中的方法:
1.?? 如何獲取Class類的實例,可以通過三種方式來進行獲取!
? ①、通過 class 屬性來進行獲取 Class 類對象,該方法最為安全可靠,程序性能更高。
?如 :Class clzz = String.class
? ②、通過對象的getClass()來進行獲取 Class類對象。這種方式最為少用。
?? ? ? ?如:String str = new String(); Class clazz = str.getClass();
?③、通過 Class 類的靜態方法 forName() 來進行獲取 Class類對象。這種方式最為常用。
??? ??如 :Class clazz = Class.forName(“java.lang.String”);
??? Class類的常用方法
| 方法名 | 功能說明 |
| static Class forName(String name) | 返回指定類名 name 的 Class 對象 |
| Object newInstance() | 調用缺省構造函數,返回該Class對象的一個對象(實例) |
| Object newInstance(Object []args) | 調用當前格式構造函數,返回該Class對象的一個對象(實例) |
| getName() | 返回此Class對象所表示的實體 (類、接口、數組類、基本類型或void)名稱 |
| Class getSuperClass() | 返回當前Class對象的父類的Class對象 |
| Class [] getInterfaces() | 獲取當前Class對象的接口 |
| ClassLoader getClassLoader() | 返回該類的類加載器 |
| Class getSuperclass() | 返回表示此Class所表示的實體的超類的Class |
1.3.?? 什么是類加載器(ClassLoader)?
???? 類裝載器是用來把類(class)裝載進 JVM 的。JVM 規范定義了兩種類型的類裝載器:啟動類裝載器(bootstrap)和用戶自定義裝載器(user-defined class loader)。 JVM在運行時會產生3個類加載器組成的初始化加載器層次結構 ,如下圖所示:
?
相關代碼:? ?
1 public void getClassLoaderName() { 2 3 // 獲取一個系統類加載。(這里是獲取的是當前類的類加載器)。 4 5 ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); 6 7 System.out.println(systemClassLoader); 8 9 // 獲取一個系統類加載的父類加載器擴展類加載器。 10 11 ClassLoader extensionClassLoader = systemClassLoader.getParent(); 12 13 System.out.println(extensionClassLoader); 14 15 // 獲取一個擴展類加載器的父類加載器引導類加載器。 16 17 ClassLoader classLoader = extensionClassLoader.getParent(); 18 19 System.out.println(classLoader); 20 21 } View Code調用該方法后的執行結果:
?
通過系統類加載器獲取 classpath 下的資源:
InputStream in = this.getClass().getClassLoader().getResourceAsStream("test.properties");
System.out.println(in);
那么接下來就來說一下反射(Reflection):參見地址?http://www.cnblogs.com/Vincent-NMT/p/6083106.html中的內容。
轉載于:https://www.cnblogs.com/Vincent-NMT/p/6083089.html
總結
以上是生活随笔為你收集整理的对于反射的一些总结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++项目參考解答:累加求圆周率
- 下一篇: java-生产者消费者模式