反射的基石---class類
反射就是把java類中的各種成分映射成相應的java類.例如:一個java類中用一個class類的對象來表示,一個類中的組成部分:成員變量,方法,構造方法,包等信息也用一個個的java類來表示,就像汽車是一個類,汽車中的 發動機,變速箱等等也是一個類.表示java類的class類顯然要提供一系列的方法來獲取其中的變量,方法,構造方法,修飾符,包等信息,這些信息就是用相應類的實例對象來表示,他們是field,method,contructor,package等.
java程序中的各個java類屬於同一個類事物,描述這類事物的java類名就是class.
什麼是字節碼:當在源程序中用到了person這個類的時候,首先將這個類的class編譯的二級制編碼加載到內存中來,然後再用這個二進制將它複製成一個個對象來.
如何得到各個字節碼對應的實例對象或者說是獲取class類
一共有三種方式:
1.類名.class,例如:System.class
2.對象.class,例如new Date().getClass
3.Class.forName("類名");例如:Class.forName("java.lang.String");
public class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException {
// 方式1
Person p = new Person();
Class c = p.getClass();
Person p2 = new Person();
Class c2 = p2.getClass();
System.out.println(p == p2);// false
System.out.println(c == c2);// true
// 方式2
Class c3 = Person.class;
// int.class;
// String.class;
System.out.println(c == c3);
// 方式3
// ClassNotFoundException
Class c4 = Class.forName("Reflect.Person");
System.out.println(c == c4);
}
}
總結:
要想解剖一個類,必須先獲取到該類的字節碼文件對象,而解剖是用的就是class類中的方法,class文件在反射中起到了基石的作用.