反射的基石Class類


反射的基石-->Class類
java程序中的各個java類屬於同一類事物,描述這類事物的java類名就是Class
對比提問:衆多的人用一個什麼類表示?衆多的java類用一個什麼類表示?
   1.人---->Person
   2.Java類---->Class
對比提問:Person類代表人,它的實例對象就是張三,李四這樣的一個個具體的人,Class類代表Java類,它的各個實例對象又分別對應什麼呢?
   1.對應各個類在內存中的字節碼,例如,Person類的字節碼,ArrayList類的字節碼等等。
   2.一個類被類加載器加載到內存中,佔用一片存儲空間,這個空間裏面的內容就是類的字節碼,不同的類的字節碼是不同的,所以它們在內存中的內容是不同的,這一個個空間可分別用一個個的對象來表示,這些對象顯然具有相同的類型,這個類型是什麼呢?


如何得到各個字節碼對應的實例對象(Class類型)
  1.類名.class,例如:System.class
  2.對象.getClass(),例如:new Date().getClass()
  3.Class.forName("類名"),例如:Class.forName("java.util.Date");


九個預定義Class實例對象:
  a.八種常見類型的.class
  b.void.class
總之,只要是在源程序中出現的類型,都有各自的Class實例對象,例如,int[],void ...



Java類用於描述同一類事物的共性,該類事物有什麼屬性,沒有什麼屬性,至於這個屬性的值是什麼,則是由這個類的實例對象來確定的,不同的實例對象有不同的屬性值,Java程序中的各個Java類,它們是否屬於同一類事物,是不是可以用一個類來描述這類事物呢?這個類的名字就是Class,要注意與小寫class關鍵字的區別。Class類描述了哪些方面的信息呢?類的名字,類的訪問屬性,類所屬於的包名,字段名稱的列表、方法名稱的列表,等等,學習反射,首先要明白Class這個類。


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

Class 沒有公共構造方法。Class 對象是在加載類時由 Java 虛擬機以及通過調用類加載器中的 defineClass 方法自動構造的。 

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
/*
 * Class 類的實例表示正在運行的 Java 應用程序中的類和接口。枚舉是一種類,註釋是一種接口。每個數組屬於被映射爲 Class 對象的一個類,
 * 所有具有相同元素類型和維數的數組都共享該 Class 對象。基本的 Java 類型(boolean、byte、char、short、int、long、float 和 double)和關鍵字 void 也表示爲 Class 對象。
Class 沒有公共構造方法。Class 對象是在加載類時由 Java 虛擬機以及通過調用類加載器中的 defineClass 方法自動構造的。 

 */
public class ReflectTest {
public static void main(String[] args) throws Exception{
String str1 = "abc";
Class cls1 = str1.getClass();//返回:表示此對象運行時類的 Class 對象。


Class cls2 = String.class;//cls2代表String的class 字節碼
Class cls3 = Class.forName("java.lang.String");//返回與帶有給定字符串名的類或接口相關聯的 Class 對象。獲取java.lang.String的class對象
System.out.println(cls1 == cls2);//比較cls1是否與cls2代表相同的類  true
System.out.println(cls1 == cls3);//比較cls1是否與cls2代表相同的類  true

System.out.println(cls1.isPrimitive());//false
System.out.println(int.class.isPrimitive());//判斷是不是基本類型的 ture
System.out.println(int.class == Integer.class);//false
System.out.println(int.class == Integer.TYPE);//它(Integer)所包裝的基本類型(int)的class  true
System.out.println(int[].class.isPrimitive());//數組也是一種類型,但不是基本類型 false
System.out.println(int[].class.isArray());//判斷類型是否爲Array類型,true

}


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章