1,反射机制的作用:通过java语言中的反射机制可以操作(读改)字节码文件,也可以操作代码片段(class文件)。
2,在java.lang.reflect包下
3,反射机制有几个比较重要的类,比如Mrthod,Field,Constructor等。
后期的高级框架使用的是反射机制,所以还是很重要的。
反射机制让代码变的灵活,比如将一些属性或者类名放在一个.properties文件里,通过IO流读取,然后只需要写一份创建类对象的代码就可以了,如果以后要更改类对象,直接在.properties文件里更改,而不用再去操作代码。
(1)properties文件
(2)通过这份代码获取类名,再创建对象。
public class ReflectDemo02 {
public static void main(String[] args) throws IOException{
//通过IO流读取properties文件
FileReader fr=new FileReader("G:\\JAVA\\Reflect\\src\\ReflectPackage\\infoClass.properties");
//创建属性类对象"Map"
Properties pro=new Properties();
pro.load(fr);
fr.close();
String className = pro.getProperty("className");
Class c1= null;
try {
c1=Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
Object o = c1.newInstance();
System.out.println(o);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
.........
// System.out.println(className);
// Class c1 = className.getClass();
// Class c2=null;
// try {
// c2=Class.forName(className);
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// }
// try {
// Object obj1 = c1.newInstance();
// Object obj2= c2.newInstance();
// System.out.println(obj1);
// System.out.println(obj2);
// } catch (InstantiationException e) {
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// e.printStackTrace();
// }
}
}
(3)输出结果
(4)在properties中更改类名,而不用更改代码
(5)再次运行得到结果