反射
反射就是把java类中的各种成分映射成一个个的Java对象
-
动态语言:运行时可以改变自身结构的语言
-
反射是java被视为动态语言的关键
反射优点
-
实现动态创建对象和编译,体现出很大的灵活性
反射缺点
-
对性能有一定影响
判断两个实体是不是同一个类
打印实体的hashcode
反射流程
实例化对象 -> getClass()方法(照镜子) -> 得到完整的包类名称
Class类
类加载完后会产生一个Class类型的对象,这个对象包含了完整的类的结构信息
-
一个类只有一个Class对象
-
Class本身也是一个类,只能由系统建立对象
Class类的创建方式
-
通过对象获得getClass();
-
forname获得
-
通过类名.class获得
类主动引用时才会发生类的初始化
-
new一个类的对象
-
调用类的静态成员(除了final常量)和静态方法
加载器
-
引导类加载器:负责Java平台的核心库,无法直接获取
-
扩展类加载器:负责jre/lib/ext目录下的jar包或 -D java.ext.dirs下的jar包装入工作
-
系统类加载器:负责java -classpath或 -D java.class.path下的类与jar包装入工作,是最常用的类
双亲委派机制:运行时根加载器优先
创建运行时类的对象
反射调用方法
-
获取:Method方法取得Method对象
-
调用:Class对象的newInstance()方法
-
使用Object invoke进行调用
invoke:激活的意思