類是對同一類事物的描述,字段具體的值只有到類實例化時才會指定,靜態字段除外。
所有的類也是同一類事物,用Class這個類來描述。Class類與String、Person等類
是同一個級別的。
java的字節碼文件被加載到方法區中后,會在堆中實例化一個java.lang.Class類的對象,
這個對象封裝了方法區內的數據結構,並向程序員提供了訪問方法區內的數據結構的接口
反射就是把Java類中的各種成分映射成相應的java類。例如,一個Java類用一個Class類
的對象來表示,一個類中的組成部分:成員字段,方法,構造方法,包等等信息也用一個個
的Java類來表示,就像汽車是一個類,汽車中的發動機,變速箱等等也是一個個的類。表示
Java類的Class類顯示要提供一系列的方法,來獲得其中的字段,方法,構造方法,修飾符,
包等信息,這些信息就是用相應類的實例對象來表示,它們是Field、Method、Contructor、
Package等等。
模擬Class類的定義:
public class Class
{
private Package package;
private Modifiers[] modifiers;
private Class superClass;
private Class[] interfaces;
private Field[] fields;
private Method[] methods;
//getter 和 setter
}
在java的Class類的源代碼中沒有定義上述的各種字段,只提供了getter和setter方法。因為Class類封裝了他要描述的類的
已經加載到內存中的字節碼流,通過這個流可以獲得上述的各種字段信息。