1、什么是反射
间接操作目标对象的机制。核心是JVM在运行时才动态加载类,并且对于任意一个类,都能知道这个类的方法和属性。允许运行中的Java程序获取类的信息,并且操作类的方法和属性。
Java运行时,动态获得类的信息以及动态调用对象的方法的功能。
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法
2. 动态语言和静态语言
动态语言的定义:在程序运行时,运行改变程序结构或者变量类型,这这种语言称为动态语言
动态语言:Perl,Python,Ruby,JavaScript
静态语言:C++,Java,C#
3. Java反射机制由以下类来实现,这些类在java.lang.reflect中
Class类: 代表一个类
Field类:代表类的成员变量
Method类:代表类的方法
Constructor类:代表类的构造方法
Array类: 提供了动态创建数组,以及访问数组的元素的静态方法。
4. Java中,无论生成某个类的多少个对象,这些对象对象都会对应同一个Class对象
5、反射的原理
参考: https://blog.csdn.net/a745233700/article/details/82893076
6. 反射的例子: 打印出String类中所有的方法
public static void main(String[] args) throws Exception { Class<?> classType = Class.forName("java.lang.String"); Method[] methods = classType.getDeclaredMethods(); for(Method method : methods){ System.out.println(method); } }
7.反射的例子2,调用单独的反射方法
public class InvokeTester { public int add(int param1, int param2){ return param1 +param2; } public String echo(String message){ return "hello: " + message; } public static void main(String[] args) throws Exception{ //传统调用 InvokeTester tester = new InvokeTester(); System.out.println(tester.add(1,5)); System.out.println(tester.echo("tom")); // 反射调用 Class<?> classType = InvokeTester.class; Object invokerTester = classType.newInstance(); //add方法 Method addMethod = classType.getMethod("add",new Class[]{int.class, int.class}); Object result = addMethod.invoke(invokerTester,new Object[]{2,3}); System.out.println(result); //echo方法 Method echoMethod = classType.getMethod("echo",new Class[]{String.class}); result = echoMethod.invoke(invokerTester,new Object[]{"world"}); System.out.println(result); } }
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!