个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~
Java反射
什么是反射?
:
- 反射允许对成员变量,成员方法和构造方法的信息进行编程访问。
反射的作用
:
- ①获取一个类里面所有的信息,获取到之后,在执行其它业务逻辑。
- ②结合配置文件,动态创建对象并调用。
1. 获取class对象的三种方式
①Class.forName("全类名");
- 最常用
②类型.class
- 常作为参数进行传递
③对象.getClass();
- 当有了这个类的对象时才可以使用
/**
* @author .29.
* @create 2023-10-20 21:36
*/
public class reflectDemo {
public static void main(String[] args) throws ClassNotFoundException {
//Student类是一个自定义的JavaBean类
//1. Class.forName("全类名")
Class clazz1 = Class.forName("com.haojin.myReflect.Student");
//2. 类名.class
Class clazz2 = Student.class;
//3. 对象.getClass()
Student student = new Student();
Class clazz3 = student.getClass();
//获取到的class对象,都是一致的
System.out.println(clazz1 == clazz2); //true
System.out.println(clazz2 == clazz3); //true
}
}
2. 反射 - 获取构造方法
Class类中用于获取构造方法的方法
:
Constructor<?>[] getConstructors()
:返回所有公共构造方法对象的数组。Constructor<?>[] getDeclaredConstructors()
:返回所有构造方法对象的数组。Constructor<T> getConstructor(Class<?>... parameterTypes)
:返回单个公共构造方法的对象。Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
:返回单个构造方法的对象。
Constructor类中用于创建对象的方法
:
T newInstance(Object... initargs)
:根据指定的构造方法创建对象。setAccessible(boolean flag)
:设置为true,表示取消访问检查。
3. 反射 - 获取成员变量
Class类中用于获取成员变量的方法
:
Field[] getFields()
:返回所有公共成员变量对象的数组。Field[] getDeclaredFields()
:返回所有成员变量对象的数组。Field getField(String name)
:返回放个公共成员变量对象。Field getDeclaredField(String name)
:返回单个成员变量对象。
Field类中用于创建对象的方法
:
void set(Object obj,Object value)
:为成员变量赋值。Object get(Object obj)
:获取成员变量的值。
4. 反射 - 获取成员方法
Class类中用于获取成员方法的方法
:
Method[] getMethods()
:返回所有公共成员方法对象的数组,包含继承的。Method[] getDeclaredMethods()
:返回所有成员方法对象的数组,不包括继承的。Method getMethod(String name,Class<?>... parameterTypes)
:返回单个公共成员方法对象。Method getDeclaredMethod(String,Class<?>... parameterTypes)
:返回放个成员方法对象
Method类中用于创建对象的方法
:
Object invoke(Object obj,Object...args)
:运行方法。-
- 参数一:用obj对象调用该方法。
- 参数二:调用方法时传递的参数(没有可以不写)
- 返回值:方法的返回值(没有可以不写)