透徹分析反射的基礎---class類

反射的基石---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文件在反射中起到了基石的作用.



發佈了153 篇原創文章 · 獲贊 588 · 訪問量 75萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章