java語言區別於C,C++等準靜態語言的最大特色就是java的反射機制。靜態語言的最直接定義就是不能在運行時改變程序結構或變量的類型.按照這樣的定義,python,ruby是動態語言,C,C++,Java不是動態語言。雖然在這樣的定義下java不是動態語言,但java的反射機制(Reflection)倒是可實現動態的相關機制。java反射機制的做用有java
一、在運行時判斷任意一個類所具備的成員變量和方法python
二、在運行時構造任意一個類的對象數組
三、在運行時判斷任意一個對象所屬的類ruby
四、在運行時調用任意一個對象的方法ide
在java的jdk中,有java.lang.reflect包,在該包中有5個比較重要的類,學習
一、Class類:表明一個類。spa
二、Constructor類:表示類的構造方法,經過該類來操做構造方法3d
三、Field類:表明類的成員變量(屬性)。代理
四、Method類:表明類的方法。經過該類可操做方法。code
五、Array類:提供了動態建立數組,以及訪問數組的元素的靜態方法。
1 package reflection; 2 3 import java.lang.reflect.InvocationTargetException; 4 import java.lang.reflect.Method; 5 6 public class TestClass { 7 8 public int add(int a,int b) 9 { 10 return a+b; 11 } 12 13 public String echo(String str) 14 { 15 return str; 16 } 17 18 public static void main(String[] args) throws Exception { 19 Class<?> classType = TestClass.class;//得到Class 20 21 Object Test = classType.newInstance();//經過classType得到對象實例 22 23 Method addMethod = classType.getMethod("add", new Class[]{int.class,int.class});//運行中得到add方法 24 25 Object result = addMethod.invoke(Test, new Object[]{1,2});//傳入參數調用add方法 26 27 System.out.println((Integer)result); 28 29 Method echoMethod = classType.getMethod("echo",new Class[]{String.class}); 30 31 Object result2 = echoMethod.invoke(Test, new Object[]{"http://www.cnblogs.com/zhi-hao/"}); 32 33 System.out.println(result2); 34 35 } 36 37 }