天天看點

Java 為什麼要用反射、成員變量、局部變量、靜态變量的差別

Java反射

有什麼作用?

一句話概括就是使用反射可以賦予jvm動态編譯的能力
否則類的中繼資料資訊隻能用靜态編譯的方式實作,例如熱加載,Tomcat的classloader等等都沒法支援
           

我們為什麼要使用反射?

靜态編譯:在編譯時确定類型,綁定對象即通過。
動态編譯:運作時确定類型,綁定對象。動态編譯最大限度地發揮了Java的靈活性,
		展現了多态的應用,可以減低類之間的耦合性。
我們可以明确的看出動态編譯的好處,而反射就是運用了動态編譯建立對象。
當我們的程式在運作時,需要動态的加載一些類這些類可能之前用不到是以不用加載到jvm,
而是在運作時根據需要才加載,
           

反射的用途:

  1. 擷取類、類的構造方法、成員變量、成員方法、Mian方法、
  2. 通過反射運作配置檔案内容

    運用反射。我們可以相應的增加一個配置檔案,在裡面記錄包中所有的類名,

    包中類增加時就加一個類名,删除時就删除一個類名。

    讓main方法去讀取這個配置檔案中的類名,通過反射獲得執行個體,完全不用我們去修改main方法中的代碼

  3. 反射方法的其它使用之—通過反射越過泛型檢查

SSM架構使用反射的地方:

比如spring xml配置的bean-->轉化為對象
	mybatis的resultMap映射等等   
           

2.什麼是成員變量、局部變量、靜态變量

成員變量随着對象的建立而存在,随着對象被回收而釋放。

 靜态變量随着類的加載而存在,随着類的消失而消失。
 成員變量存儲在堆記憶體的對象中,是以也叫對象的特有資料。

 靜态變量資料存儲在方法區(共享資料區)的靜态區,是以也叫對象的共享資料

 同時Java的方法又可以分為,成員方法(普通方法)、全局方法(static)、構造方法