反射机制
-
反射机制的作用
- 通过java语言中的反射机制可以操作字节码文件
- 优点类似于黑客(可以读和修改字节码文件)
- 通过反射机制可以操作代码片段(class文件)
- 通过java语言中的反射机制可以操作字节码文件
-
反射机制的相关类在哪个包下
- java.lang.reflect.
-
反射机制相关的类有哪些
- java.lang.Class:代表字节码文件,代表一个类型,代表整个类
- java.lang.reflect.Method:代表字节码中的方法字节码,代表类中的方法
- java.lang.reflect.Constructor:代表字节码中的构造字节码,代表类中的构造方法
- java.lang.reflect.Field:代表字节码中的属性字节码,代表类中的成员变量(静态+实例变量)
-
要操作一个类的字节码,需要首先获取到这个类的字节码,怎么获取java.lang.Class实例?
- 三种方式
- way1:Class c = Class.forName(“完整类名带包名”);
- way2:Class c= 对象.getClass();
- way3:java语言中任何一种类型,包括基本数据类型,它都有.class属性
- eg:
- Class k = Date.class;
- eg:
- 获取到Class,能干什么
- 通过Class的newInstance()方法来实例化对象
- 注意:newInstance()方法内部实际上调用了无参数构造方法,必须保证无参构造存在才可以
- 通过Class的newInstance()方法来实例化对象
- 三种方式
-
反射机制的灵活性
- java代码写一遍,在不改变java源代码的基础之上,可以做到不同对象的实例化,非常灵活(符合OCP开闭原则:对扩展开放,对修改关闭)
- 通过修改配置文件,配置文件修改之后,可以创建出不同的实例对象
-
高级框架包括:ssh ssm
Spring SpringMVC MyBatis
Spring Struts Hibernate…
这些高级框架底层实现原理:都采用了反射机制。所以反射机制还是重要的。学会了反射机制有利于理解剖析框架底层的源代码 -
研究Class.forName()发生了什么?
- 重点:
- 如果只希望一个类的静态代码块执行,其他代码一律不执行,可以使用Class.forName(“完整类名”);这个方法的执行会导致类加载,类加载时,静态代码块执行
- 重点: