相关github链接:反射
1.是JAVA API,是java提供的现成的类
2.是java提供的动态执行机制,可以动态加载类,动态创建对象,动态访问属性,动态调用方法.
静态与动态
静态:事先约定的规则,执行期间按照固定的规则执行.
java中的静态执行:编译时已经就确定执行规则(执行次序),在运行期间按照编译结果顺序执行.
动态:事先没有约定,在执行期间动态确定执行规则.
java中的动态执行:运行期间才能确定加载哪些类,创建哪些对象,执行哪些方法...
反射的作用
import java.lang.reflect.Method; import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { Scanner input = new Scanner(System.in); System.out.println("input Class:"); String className = input.nextLine(); //动态加载类 Class clazz = Class.forName(className); System.out.println(clazz); //动态创建对象 Object obj = clazz.newInstance(); System.out.println(obj); //动态查询类的方法信息 //从clazz代表的类信息中获取全部的方法信息 //每一个Method代表一个方法信息 //方法的所有要素都在这个对象中 Method[] ary = clazz.getDeclaredMethods(); for (Method method : ary) { System.out.println(method); //获取方法的详细信息 System.out.println(method.getName()); System.out.println(method.getReturnType()); //查找与test开头的方法 String name = method.getName(); if (name.startsWith("test")) { System.out.println("find"); } } input.close(); } }
动态加载类
class clazz = Class.forName(类名);
import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { Scanner input = new Scanner(System.in); System.out.println("input Class:");