- 反射
Java的反射(reflection)机制是指在程序的运行过程中,可以创建任意类的对象, 对于任意一个类,了解类的信息以及属性和方法, 对于任意一个对象,可以调用对象的属性和方法。 这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。 |
2.反射机制相关的类
类加载时,JVM自动生成类的Class类对象。 将类的成员进行拆分,拆分成一个个对象。 | |
类 | 描述 |
Class | 代表类对象 |
Field | 代表属性对象 |
Constructor | 代表构造方法对象 |
Method | 代表方法对象 |
3.创建Class类对象三种方式
Class.forName(“全限定名”); //全限定名:包名+类名 (推荐) 类名.class ; 对象名.getClass(); |
4.Class类对象常用的方法
1. 获取类的包名、类名、修饰符....基本信息的方法
方法名 | 描述 |
getPackageName() | 获取包名 |
getName() | 获取全限定名.(包名+类名) |
getSimpleName() | 获取类名 |
getModifiers() | 获取修饰符 |
getSuperclass() | 获取父类 |
getInterfaces() | 获取实现的父接口 |
2. 获取构造方法对象 Constructor
方法名 | 描述 |
getConstructor(类<?>... parameterTypes) | 获取指定的公共的构造方法 |
获取所有的公共的构造方法 | |
getDeclaredConstructor(类<?>... parameterTypes) | 获取指定的构造方法 |
获取所有的构造方法 |
构造方法对象常用的方法
方法名 | 描述 |
getModifiers() | 获取修饰符 |
getName() | 获取构造方法名 |
getParameterCount() | 获取参数个数 |
newInstance() | 创建对象 |
3. 获取属性对象 Field
方法名 | 描述 |
getField(String name) | 获取指定的公共的属性对象 |
getFields() | 获取所有的公共的属性对象 |
getDeclaredField(String name) | 获取指定的属性对象 |
获取所有的属性对象 |
属性对象常用的方法
方法名 | 描述 |
getModifiers() | 获取修饰符 |
getType() | 获取数据类型 |
getName() | 获取属性名 |
set(Object obj ,Object value) | 给指定对象的属性赋值 |
get(Object obj) | 获取指定对象的属性值 |
4. 获取方法对象 Method
方法名 | 描述 |
getMethod(String name, 类<?>... parameterTypes) | 获取指定的公共的方法对象 |
getMethods() | 获取所有的公共的方法对象 |
String name, 类<?>... parameterTypes) | 获取指定的方法对象 |
获取所有的方法对象 |
方法对象常用的方法
方法名 | 描述 |
getModifiers() | 获取修饰符 |
getReturnType() | 获取返回值类型 |
getName() | 获取方法名 |
getParameterCount() | 获取参数个数 |
invoke(Object obj,Object...args) | 调用方法 |
5.私有化成员访问,设置忽略访问修饰符
setAccessible(true); |
6.反射应用
应用场景:当程序运行时才能确定创建对象,需要用反射。
好处:提高程序的灵活性和可扩展性,降低耦合性。
应用场景:模拟Servlet底层实现
- 写一个java类,实现Servlet接口
重写service()方法,处理请求
public class AddEmpServlet implements Servlet{ |
2web.xml配置Servlet的访问路径
<servlet> |
执行原理:
- 当服务器启动时,加载web.xml文件。获取 url-->serlvet的映射关系
当你访问哪一个url路径,创建对应的Servlet
- 当输入url访问路径时,找到对应Servlet。
- 创建Servlet对象,调用service()方法处理请求