Java程序中的各個Java類屬於同一類事物,描寫敘述這類事物的Java類名就是Class.
public class ReflectTest { public static void main(String[] args) throws ClassNotFoundException { String str1 = "abc"; Class cls1 = String.class; Class cls2 = str1.getClass(); Class cls3 = Class.forName("java.lang.String"); System.out.println(cls1 == cls2); System.out.println(cls2 == cls3); } }獲取Class類的實例方法有三種:
1、類名.class
2、對象.getClass()
3、Class.forName("String path);
上面樣例中兩個返回都是true,我們能夠看到三種方式獲取到的Class類的實例是同樣的。每個類型就是一個Class類的實例對象。
以下我們再來看看Class類的isPrimitive()方法:
public class ReflectTest { public static void main(String[] args) throws ClassNotFoundException { String str1 = "abc"; Class cls1 = String.class; Class cls2 = str1.getClass(); Class cls3 = Class.forName("java.lang.String"); System.out.println(cls1 == cls2); System.out.println(cls2 == cls3); System.out.println(cls1.isPrimitive()); System.out.println(int.class.isPrimitive()); System.out.println(int.class == Integer.class); System.out.println(int.class == Integer.TYPE); } }執行結果:
從上面結果能夠看到,Integer類型的字節碼和int類型的字節碼不是同一個,在Java中有九種提前定義的 Class
對象。表示八個基本類型和 void。這些類對象由 Java 虛擬機創建,與其表示的基本類型同名。即 boolean
、byte
、char
、short
、int
、long
、float
和 double
。
除過Integer.TYPE外,還有:Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE
僅僅要在源程序中出現的類型,都有各自的Class實例對象,推斷的方法例如以下:
反射就是把Java類中的各種成分映射成對應的Java類。
比如,一個Java類用一個Class類的對象來表示,一個類中的組成部分:成員變量,方法,構造方法,包等等信息也用一個個的Java類來表示,就像汽車是一個類。汽車中的發動機,變速箱也是一個個的類。表示Java類的Class類中提供了一系列的方法來獲取當中的變量(Field),方法(Method),構造方法(Contructor),修飾符,包(Package)等信息。