JAVA反射機制是在運行狀態中,對於任意一個類,都可以知道這個類的全部屬性和方法;對於任意一個對象,都可以調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱爲java語言的反射機制。——百度百科html
每個java類都對應着一個Class對象,程序編譯階段Class類對象被變成字節碼文件存放於類路徑下(即.class文件),當java類第一次被裝載時jvm會建立該類的Class對象。Class類對象中包含着該類的所有信息,包括變量、方法等。java
jvm啓動時,並不是一次性將全部能識別的類所有都加載到內存中,實際上類的加載時機是在該類第一次被使用時被加載的。使用一個類時的大體的加載流程以下:jvm
類的空間分配:指分配靜態常量成員的空間ide
類初始化:對靜態常量成員進行初始化及靜態代碼塊的執行,若有超類,先對超類初始化spa
1 package TestRefection; 2 3 import org.junit.Test; 4 5 public class ListTest { 6 7 @Test 8 public void testHelloWorld() { 9 try { 10 Class.forName("TestRefection.TestClass1"); 11 Class clazz = TestClass3.class; 12 new TestClass2(); 13 } catch (ClassNotFoundException e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 } 17 } 18 19 } 20 21 class TestClass1 { 22 static { 23 System.out.println("=================TestClass1================"); 24 } 25 } 26 27 class TestClass2 { 28 static { 29 System.out.println("=================TestClass2================"); 30 } 31 } 32 33 class TestClass3 { 34 static { 35 System.out.println("=================TestClass3================"); 36 } 37 } 38 39 -------------------------執行結果------------------------- 40 =================TestClass1================ 41 =================TestClass2================
爲了在程序運行的過程經過反射對已有類或對象作一些操做,均須要獲取Class對象,獲取Class對象有如下三種方法:code
在Java中,Class類與java.lang.reflect類庫一塊兒對反射技術進行了全力的支持。其中反射庫中Constructor類用於操做構造方法、Method類用於操做方法、Field類用於操做變量。其具體的使用能夠見下一章。htm
關於反射技術的具體使用,不少書籍和文章都已經有了詳細的說明,如下轉載一篇反射技術的使用方法的文章,轉載地址:對象
http://www.cnblogs.com/zhaoyanjun/p/6074887.htmlblog