反射机制
- java静态语言----通过反射----利用反射机制获得类似动态语言的特性
- 类结构
- 优点:可以实现动态创建和编译,体现出很大的灵活性
- 缺点:对性能有影响。使用反射基本上是一种解释操作
理解Class类并获取Class实例
- 只要数组元素与维度一样,就是同一个Class
类的加载与ClassLoader
- 加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构
- 链接:将Java类的二进制代码合并到JVM的运行状态之中的过程
- 初始化:执行类构造器() 方法的过程,执行类构造器() 方法是由编译器自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生
类的初始化
类的主动引用
- new 对象
- Java.lang.reflect包方法对类进行发射调用
类的被动引用
- 当访问静态域是,只有真正声明这个域的类才会被初始化。如:当通过子类引用弗雷的静态变量,不会导致子类初始化
- 通过数组定义引用,不会触法此类的初始化
- 引用常量不会触法此类的初始化(常量在链接阶段就存入调用类的常量池中了)
类加载器
- 类加载
- 源程序,*.java文件
- java编译器
- 字节码,*.class文件
- 类装载器
- 字节码校验器
- 解释器
- 操作系统平台
加载器作用
- 引导类加载器:用C++编写,是JVM自带的类加载器,分则Java平台核心库,用来装载核心类库。该加载器无法直接获取
- 扩展类加载器:负责jre/lib/ext目录下的jar包 或- D java.ext.dirs指定目录下的jar包装入工作库
- 系统类加载器:负责Java -classpath 或- D java.class.path所指的目录下的类与jar包装入工作,是最常用的加载器
费曼学习法
- 找到学习目标(将大标题写在白纸/电子文档上端)
- 像老师一样提取关键词,看需要用到那些知识解决问题
- 如果解决不了问题回到第二步
- 将复杂冗长的解答转化成简洁易懂的解答(可用图表等表示)也就是深入浅出
反射相关API
- java.lang.Class:代表一个类(核心类)
- java.lang.reflect.Method:代表类的方法
- java.lang.reflect.Field:代表类的成员变量
- Java.lang.reflect.Constructor:代表类的构造器