反射机制

反射机制

反射机制概述

  • 反射机制的作用:
    • 通过反射机制可以操作字节码文件(可以读和修改字节码文件。
    • 通过反射机制可以操作代码片段(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()在执行时,会导致类加载,所以会执行一次静态方法。

posted @ 2023-01-10 22:28  Winterqq  阅读(33)  评论(0编辑  收藏  举报