教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓實戰(zhàn)教程之淺談Java反射中的Class類

更新時間:2015年12月29日13時37分 來源:傳智播客Java培訓學院 瀏覽次數(shù):

在學習Java的過程中會遇到關于反射技術知識學習,這個技術在學習的過程中有一定的難度,今天就和大家一起研究下反射最重要的一個類Class。
 
介紹Class類:
在學習Java過程中我們知道書寫的任何類、接口、枚舉、注解等程序經過JDK中的javac命令編譯之后都會在指定的硬盤目錄下生成對應的class文件(就是字節(jié)碼文件,為了通俗易懂這里稱為class文件)。而這些class文件針對JVM而言就是一類可以直接執(zhí)行的程序文件,學習Java面向對象過程中知道,任何存在的事物都可以使用對應的類或者接口等形式進行封裝描述,同樣道理針對class文件這類事物,在Java中使用了Class類進行封裝和描述的(如下圖)。
 
介紹獲取Class對象:
通過上圖可以知道任何class文件都可以使用Class類進行描述封裝,也就是說任何一個class文件都可以理解成Class類的一個實例對象。當我們在程序獲取到某個類的對應的class文件本身,其實就等價于獲取到Class類的一個實例。
Java中提供三種方式可以獲取到Class類的一個實例對象(某個類的class文件對象)。
n  當獲取到某個類的真實對象,可以使用Object類中的getClass獲取。例如:當有一個Person類的時候,假設可以通過new關鍵字創(chuàng)建出Person對象,就可以通過Person對象調用getClass獲取到Person的class文件對象。
    //演示獲取Class對象的第一種方式 使用Object類中的getClass方法
    public static void method_1() {
      
       //創(chuàng)建Person對象
       Person p = new Person("上海傳智播客",3);
      
       //獲取Person對象對應的class文件(Class對象)
       Class clazz = p.getClass();
      
       System.out.println(clazz);
      
    }
 
n  在Java中的任何類型都有一個對應的靜態(tài)屬性class,可以直接獲取到某個類型對應的class文件(Class對象)。
    //獲取Class對象的第二種方式, 使用任何類型中的靜態(tài)成員變量class屬性
    public static void method_2() {
      
       //獲取Person的class文件對象
       Class clazz = Person.class;
       System.out.println(clazz);
      
       //獲取數(shù)組對應的class文件對象
       Class clazz2 = int[].class;
       System.out.println(clazz2);
      
       //獲取基本類型對應的class文件對象
       Class clazz3 = double.class;
       System.out.println(clazz3);
      
    }
 
n  在我們學習Java的過程中,我們知道當需要獲取任何類對應的對象時可以使用這個類的構造方法或者這類中的某些靜態(tài)方法等方式獲取,在Class的api中提供了靜態(tài)成員方法forName可以直接獲取到Class對象。
    public static void method_3() throws Exception {
      
       //獲取到自定義類的class文件對象
       Class clazz = Class.forName("cn.itcast.sh.domain.Person");
       System.out.println(clazz);
       //獲取JDK中提供的類或接口對應的class文件對象
       Class clazz2 = Class.forName("java.util.Map");
       System.out.println(clazz2);
      
    }
 
Class對象能干什么?
 
Class對象它表示的具體的某個Java源代碼在編譯之后生成的class文件對象,而這個class文件中就保存著當前這個類或者接口的所有成員信息,因此當在程序中獲取到了對應的class文件對象(Class對象)就可以動態(tài)的去得到這個類或者接口中描述的成員變量、成員方法、構造方法、靜態(tài)代碼塊等成員信息。因此只要在程序能夠獲取到Class對象,就可以去得到任何類中的任何信息。
 
Java中的反射技術到底能干什么呢?
 
反射技術主要使用在框架等功能性程序的底層,主要的目的是可以提供擴展性非常強的通用功能。反射技術的工作原理也十分的簡單:我們在使用別的功能性程序或者框架時,需要把我們的程序配置在指定的文件(配置文件)中,在運行程序時,框架就會自動的去讀取配置文件中的配置信息,通過上述的三種方式種的某一種獲取到對應class文件對象,進而解析出其中的成員信息,最終讓這些成員信息可以動態(tài)的執(zhí)行起來。
 
如果想知道具體如何獲取class文件中的成員信息,請關注傳智播客官方論壇或者微信賬號。
 

本文版權歸傳智播客Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://oisangadgets.com/javaee 
 
 
0 分享到:
和我們在線交談!