反射机制
反射机制概述
- 反射机制的作用:
- 通过反射机制可以操作字节码文件(可以读和修改字节码文件。
- 通过反射机制可以操作代码片段(class文件)
- 反射机制在哪个包下面:
- java.lang.reflect.*
- 反射机制相关的重要的类:
- java.lang.class : 代表整个字节码文件,一个类
- java.lang.reflect.Method : 代表字节码中的方法字节码,方法
- java.lang.reflect.Constructor : 代表构造方法
- java.lang.reflect.Field:代表属性
获取Class的三种方式
/*
class.forName()
1 静态方法
2 方法参数是一个字符串
3 字符串需要一个完整类名,必须带有包名
*/
Class c1 = Class.forName("java.lang.String");
//java 中任何对象都有一个方法:getClass()
String s = "afds";
Class x = s.getClass();
c1==x
//java 中任何一种类型都有.class属性
Class z = String.class
实例化对象
通过反射机制获取Class,通过Class来实例化对象
Class c = Class.forName("com.winter.user");
Object obj = c.newInstance();
//newInstance() 这个方法会调用user类的无参数构造方法,完成对象的创建
反射机制的灵活性
可以在不改变java代码的基础上,做到不同对象的实例化,非常灵活。
符合OCP开闭原则:对扩展开放,对修改关闭
FileReader reader = new FileReader(fileName:"");
Properties pro = new Properties();
pro.load(reader);
reader.close();
String className = pro.getProperties("className");
Class c = Class.forName(className);
Object obj = c.newInstance();
System.out.println(obj);
Class.forName()
-
Class.forName()发生了什么?
静态代码块在类加载时执行,并且只执行一次。
Class.forName()在执行时,会导致类加载,所以会执行一次静态方法。