1.什么是java的反射机制
reflection 反射机制是java被视为具备动态语言特质的关键技术。
动态语言:在运行时能够改变程序结构和参数类型
反射:程序在运行过程中能够查看类自身的信息以及调用对象的方法
2.反射的作用和原理
2.1 作用
1.反编译
2.动态性
2.2 原理
Class类 类类 是反射机制源泉入口
jvm加载.class文件的时候运行时,会为该文件创建一个
Class对象与之对应
我们就可以通过该Class对象来查看类的信息(反编译)
3.学会java反射API的基本操作(重点 务必理解掌握)
着重掌握API(java.lang.reflect)
Class类
Method类
Field类
Constructor类
3.1 创建类的对象
第一步 创建Class类
第一种:通过类的全称字符串来创建(最常见使用最多)
Class c1 = Class.forName("包名+类名");
第二种:通过类名.class来创建
Class c1 = String.class;
第三种:通过对象的getClass()方法来创建
User user = new User();
Class c1 = user.getClass();
第四种:通过调用父类的Class对象来创建
第二部 通过Class类实例化该类对象
Object obj = c1.newInstance();
特殊情况:
以上创建方法只针对提供无参构造方法的javaBean
Constructor constrctor = c4.getConstructor(new Class[]{String.class});
User user4 = (User)constrctor.newInstance(new Object[]{"123"});
3.2 调用对象方法
1.Method[] methods = c1.getMethods();
2.Method[] methods = c1.getDeclaredMethods();
3.Method method = c1.getMethod("getName", new Class[]{});
String name = (String)method.invoke(user, new Object[]{});
3.3 给属性赋值
Field field = c1.getField("name");
Field[] fields = c1.getDeclaredFields();
4.实例 通过反射API拷贝一个对象
reflection 反射机制是java被视为具备动态语言特质的关键技术。
动态语言:在运行时能够改变程序结构和参数类型
反射:程序在运行过程中能够查看类自身的信息以及调用对象的方法
2.反射的作用和原理
2.1 作用
1.反编译
2.动态性
2.2 原理
Class类 类类 是反射机制源泉入口
jvm加载.class文件的时候运行时,会为该文件创建一个
Class对象与之对应
我们就可以通过该Class对象来查看类的信息(反编译)
3.学会java反射API的基本操作(重点 务必理解掌握)
着重掌握API(java.lang.reflect)
Class类
Method类
Field类
Constructor类
3.1 创建类的对象
第一步 创建Class类
第一种:通过类的全称字符串来创建(最常见使用最多)
Class c1 = Class.forName("包名+类名");
第二种:通过类名.class来创建
Class c1 = String.class;
第三种:通过对象的getClass()方法来创建
User user = new User();
Class c1 = user.getClass();
第四种:通过调用父类的Class对象来创建
第二部 通过Class类实例化该类对象
Object obj = c1.newInstance();
特殊情况:
以上创建方法只针对提供无参构造方法的javaBean
Constructor constrctor = c4.getConstructor(new Class[]{String.class});
User user4 = (User)constrctor.newInstance(new Object[]{"123"});
3.2 调用对象方法
1.Method[] methods = c1.getMethods();
2.Method[] methods = c1.getDeclaredMethods();
3.Method method = c1.getMethod("getName", new Class[]{});
String name = (String)method.invoke(user, new Object[]{});
3.3 给属性赋值
Field field = c1.getField("name");
Field[] fields = c1.getDeclaredFields();
4.实例 通过反射API拷贝一个对象