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)等信息。
