JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。
获取String的方法
1public class DumpMethods { 2 3 4 public static void main(String[] args) throws Exception{ 5 6 Class<?> classType = Class.forName("java.lang.String"); 7 8 Method[] methods =classType.getDeclaredMethods(); 9 10 for (Method method:methods){ 11 System.out.println(method); 12 } 13 14 } 15 16 17}
截图:

通过反射调用方法
通过反射调用方法。详情见代码及注释:
1import java.lang.reflect.Method; 2public class InvokeTester 3{ 4 public int add(int param1, int param2) 5 { 6 return param1 + param2; 7 } 8 public String echo(String message) 9 { 10 return "Hello: " + message; 11 } 12 public static void main(String[] args) throws Exception 13 { 14 // 以前的常规执行手段 15 InvokeTester tester = new InvokeTester(); 16 System.out.println(tester.add(1, 2)); 17 System.out.println(tester.echo("Tom")); 18 System.out.println("---------------------------"); 19 20 // 通过反射的方式 21 // 第一步,获取Class对象 22 // 前面用的方法是:Class.forName()方法获取 23 // 这里用第二种方法,类名.class 24 Class<?> classType = InvokeTester.class; 25 26 // 生成新的对象:用newInstance()方法 27 Object invokeTester = classType.newInstance(); 28 System.out.println(invokeTester instanceof InvokeTester); // 输出true 29 30 31 32 // 通过反射调用方法 33 // 首先需要获得与该方法对应的Method对象 34 Method addMethod = classType.getMethod("add", new Class[] { int.class, int.class }); 35 36 // 第一个参数是方法名,第二个参数是这个方法所需要的参数的Class对象的数组 37 // 调用目标方法 38 Object result = addMethod.invoke(invokeTester, new Object[] { 1, 2 }); 39 System.out.println(result); // 此时result是Integer类型 40 41 //调用第二个方法 42 Method echoMethod = classType.getDeclaredMethod("echo", new Class[]{String.class}); 43 Object result2 = echoMethod.invoke(invokeTester, new Object[]{"Tom"}); 44 System.out.println(result2); 45 } 46}