- 通过代码去创建一个对象,不用new
- Class类:用于收集其它类的类信息,形成Class对象
- 反射获取类信息的方式有哪三种?(面试点)
- Object.class;
- Object.getClass()
- Class.forName(String className)
- 反射通过newInstance方式获取类的实例(面试点)
- Object o=Class.forName(String className).newInstance()
- 为什么要使用反射?
- 没有主方法借助其他程序运行,不能独立运行
- 调用任何非静态方法之前生成类的实例,非静态方法只能通过实例调用
- 注解的作用:内存中加一个标记,使用的时候通过反射拿出来,servlet中的@WebServlrt就是一个注解
- 反射主要用于框架,因为框架开发者不能预测使用者定义的类信息,所以只能通过反射方式拿使用这定义的类的信息。以servlet框架为例,@webServlet(“”)存的是类的路径,servlet在tomcat中运行时,这个被反射拿出来通过Class.forName(“”)等方法获取类信息,然后再使用newInstance方法获取类的实例。然后实现我们在servlet项目中编写的内容。
- 我们在编程时看到的一切信息都可以被反射拿到,捕获到
- 注解:有自定义注解,
- An开头的全都是注解,getAn…获取注解
- 框架的核心是反射
- 反射的时候能不能获取私有信息?(面试点)可以,要改一下Constructor. setAccessible(true);
- Tomcat通过反射拿到servlet的实例
- Java的反射只能获取信息不能执行
- 我们直接写出来的叫直接执行
- 代理执行:通过代码来执行的叫代理执行
- Object.invoke()执行代理时使用
- 通过代理机制可以调用反射拿到的任何方法,
- Method.invoke(),方法为静态方法时参数(null,参数),非静态方法是(对象名,参数)