1.什么是反射:
Java的反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有方法和属性,对于任意一个对象,都可以调用这个对象的任意方法和属性。这种动态获取信息和动态调用对象的方法和属性的功能称之为Java的反射机制。
反射就是把Java类中各种成分映射成一个个对象。
2.反射的主要作用
1.比如一些开发工具,如idea啊,当你输入对象或者类时,想调用它的属性和方法时,按一下点,就可以看到他的方法和属性,这就是运用了反射。
2.反射最重要的用途是开发各种通用框架,很多框架(如Spring)都是配置化的(比如通过xml文件配置bean),为了保证框架的通用性,可能需要根据配置文件加载不同的对象或类,再调用不同的方法。这都需要用到反射,运行时动态加载需要加载的对象。
3.反射的基本运用
1.运用反射首先要获取字节码文件对象,有三种方法:
1.Class<?> class = Class.forName(包名);(常用)
2.Class<?> class = int.class
Class<?> class = Integer.TYPE;
3.Class<?> class = new 对象.getClass();
2.获取方法和属性:
Class<?> class = Class.forName(包名);
Method[ ] methods = class.getDeclaredMethods() //返回该类的所有方法,除了继承的方法。
Method[ ] methods = class.getMethods() //返回所有公用方法,包括继承的公用方法。
Method method = class.getMethod(方法名,该方法参数的Class的对象) ;//返回一个特定方法。
Field[ ] field = class.getFields() //获取所有公用字段;
Field[ ] field = class.getDeclaredFields() //获取所有字段,包括私有的;
Field field = class.getField(字段名) //获取单个公用字段;
Field field = class.getDeclaredField(字段名) //获取单个字段,包括私有的;
3.创建一个对象实例
Class<?> class = Class.forName(包名);
Method method = class.getMethod(“add”,String.Class) //返回该类的所有方法,除了继承的方法。
Object obj = class.getConstructor().newInstance(); //根据构造函数实例化一个对象
method.invoke(obj,"str"); // 调用方法。