java反射问题
1、初识class:
编写源代码.java >>> 编译.class >>> 类加载器ClassLoader >>> 字节码文件
java中获得类的对象的方法
Class是一个描述类的类
获得Class对象的方法:
2、反射的概念
是在运行期,对任意一个类,都能知道这个类的属性和方法;
对任意一个对象,都能调用这个对象的属性和方法;
3、反射的作用
① 可以是程序访问JVM中类的信息
②获取类装载的属性、方法、以及构造方法
实际应用:
1、跳过编译器检查
2、在框架中使用
3、简单工厂模式的应用
4、反射相关的类
- class 描述类的类
- mehtod 描述类的方法
class中的method操作方法都为 方法名.invoke(obj,param),如果是静态属性则将obj改为null.没有param可不写。
- Field 成员变量
//父类所有的属性
fields = dogClass.getSuperclass().getDeclaredFields();
class中的属性操作方法都为 属性名.set(obj,value),如果是静态属性则将obj改为null.
- Constructor 构造方法
- Array 数组
- Modifuer 类成员修饰符
5、反射的优点:
提高了java程序的灵活性和拓展性,降低了了耦合性,无需提前硬编码目标类
其它一些常用语言 C++ Pascal都不具备
应用领域广:软件测试、EJB、javaBean包括框架也是用了很多反射
6、反射的缺点
使用反射相对要慢于直接编码,非拓展性要求很高的框架不建议使用
维护很复杂,因为看不到编码逻辑
7、创建对象的三种方式
①、通过new 关键字
②、通过反射Class.newInstance/反射的constructor.newInstructor
③、clone关键字,需要被克隆类实现Cloneable接口
④、通过ObjectInputStream readObject 也可以,对象反序列化