在反射中,我们需要得到的是构造方法、成员方法、成员变量 得到这些的前提是得到.class文件的类对象 1.Class 1.Class类的静态成员方法,通过完整的包名.类名获取对应.class文件的Class对象 Class Class.forName(String packageNameAndClassName); 2.通过类名.class方法,获取对应的Class类对象,通常用于方法的参数类型 Class 类名.class; 3.通过类对象获取对应.class的Class类对象,方法参数,或者说数据类型判断 Class 类对象.getClass(); 2.Constructor 1.获 Java中的反射机制是一种强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于`Class`类,它是Java语言中所有类的通用表示。以下是关于Java反射常用方法的详细说明: 1. **获取Class对象**: - `Class.forName(String className)`: 通过完全限定类名(包名+类名)获取对应的`Class`对象,常用于动态加载类。 - `类名.class`: 通过类名直接获取`Class`对象,适用于知道确切类名的情况,如作为方法参数类型。 - `类对象.getClass()`: 获取已实例化对象所属的`Class`对象,适用于已有对象的情况。 2. **构造方法的访问**: - `getConstructors()`: 获取所有公共构造方法的`Constructor`对象数组。 - `getDeclaredConstructors()`: 获取所有构造方法的`Constructor`对象数组,包括私有构造方法。 - `getConstructor(Class... argTypes)`: 获取具有指定参数类型的公共构造方法。 - `getDeclaredConstructor(Class... argTypes)`: 获取具有指定参数类型的构造方法,可能包括私有构造方法。 - `newInstance(Object... args)`: 使用指定参数通过构造方法创建新的对象实例。 3. **成员方法的访问**: - `getMethods()`: 获取类及其父类的所有公共成员方法。 - `getDeclaredMethods()`: 获取类自身声明的所有成员方法,不包括父类方法。 - `getMethod(String name, Class... paramTypes)`: 获取具有指定名称和参数类型的公共成员方法。 - `getDeclaredMethod(String name, Class... paramTypes)`: 获取具有指定名称和参数类型的成员方法,包括私有方法。 - `invoke(Object obj, Object... args)`: 通过`Method`对象调用对应方法,并传入参数。 4. **成员变量的访问**: - `getFields()`: 获取类及其父类的所有公共成员变量。 - `getDeclaredFields()`: 获取类自身声明的所有成员变量,不包括父类变量。 - `getField(String name)`: 获取具有指定名称的公共成员变量。 - `getDeclaredField(String name)`: 获取具有指定名称的成员变量,包括私有变量。 - `set(Object obj, Object value)`: 设置指定对象中成员变量的值。 - `get(Object obj)`: 获取指定对象中成员变量的值。 5. **注意事项**: - 暴力反射:通过`setAccessible(true)`方法,可以绕过访问控制,允许访问私有的构造方法、成员变量和成员方法。 - 访问成员变量和方法时通常需要指定对象实例,因为每个对象的成员都可能不同。 - 许多反射方法可能抛出异常,如`ClassNotFoundException`, `NoSuchMethodException`, `IllegalAccessException`, `IllegalArgumentException`等,需要进行异常处理。 反射机制在Java中广泛应用,如插件开发、动态代理、序列化、框架设计等,它提供了运行时的灵活性,但同时也可能导致安全问题和性能损失,因此在使用时应谨慎。
- 粉丝: 2
- 资源: 917
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于SSM框架的大学消息通知系统服务端.zip
- (源码)基于Java Servlet的学生信息管理系统.zip
- (源码)基于Qt和AVR的FestosMechatronics系统终端.zip
- (源码)基于Java的DVD管理系统.zip
- (源码)基于Java RMI的共享白板系统.zip
- (源码)基于Spring Boot和WebSocket的毕业设计选题系统.zip
- (源码)基于C++的机器人与船舶管理系统.zip
- (源码)基于WPF和Entity Framework Core的智能货架管理系统.zip
- SAP Note 532932 FAQ Valuation logic with active material ledger
- (源码)基于Spring Boot和Redis的秒杀系统.zip
评论0