對於反射的一些總結(一)

1.  Class類:  

1.1.   關於 Class 類的概述:    

        咱們要了解反射,首先就要了解 Class 這個類。接下來就先來了解一下Class類吧!html

        Class 類的實例表示一個正在運行的 Java 應用程序的類和接口。例如:枚舉是一種類,註釋是一種接口。每一個數組屬於被映射爲 Class 類型的實例(對象)建立的一個類,全部具備相同元素類型和維數的數組都共享該 Class 對象。基本的 Java 類型(boolean、byte、char、short、int、long、float 和 double)和關鍵字 void 也表示爲 Class 對象。java

        Class 沒有公共構造方法。Class 對象是在類加載時由 Java 虛擬機以及經過調用類加載器中的 defineClass 方法自動構造的咱們能夠經過這個Class 類型的對象來進行獲得一些信息:某個類的數據成員名、方法和構造器、某個類到底實現了哪些接口。bootstrap

對於上面說這麼多總結而言,就是下面的幾句話:數組

  對於每一個類而言:安全

    ①  、JRE 都爲其保留一個不變的 Class 類型的對象。一個 Class 對象包含了特定某個類的有關信息。ide

    ②  、Class 對象只能由系統創建對象。函數

    ③  、一個類在 JVM 中只會有一個Class實例 每一個類的實例都會記得本身是由哪一個 Class 實例所生成。性能

1.2.   關於 Class 類中的方法:

  1.   如何獲取Class類的實例,能夠經過三種方式來進行獲取!

     ①、經過 class 屬性來進行獲取 Class 類對象,該方法最爲安全可靠,程序性能更高。this

       如 :Class clzz = String.classspa

     ②、經過對象的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中的內容。

相關文章
相關標籤/搜索