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 }