1.Java类加载机制
jvm把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成jvm可以直接使用的java类型的过程。
- 加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结 构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口。
- 链接:将java类的二进制代码合并到jvm的运行状态之中的过程,链接过程又分为3个过程:
- 验证:确保加载的类信息符合jvm规范,没有安全方面的问题。
- 准备:正式为类变量(static变量)分配内存并设置类变量初始值的阶段,这些内存都将在方 法区中进行分配。
- 解析:虚拟机常量池内的符号引用替换为直接引用的过程。(比如String s =“aaa”,转化为 s的 地址指向“aaa”的地址)
- 初始化:初始化阶段是执行类构造器方法的过程。类构造器方法是由编译器自动收集类中的所有类变 量的赋值动作和静态语句块(static块)中的语句合并产生的。
1.当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先初始化其父类的初始化
2.虚拟机会保证一个类的构造器方法在多线程环境中被正确加锁和同步
3.当访问一个java类的静态域时,只有真正声明这个静态变量的类才会被初始化。
Java类的生命周期:
-
ClassLoader类加载器
ClassLoader类加载器的作用就是将 .class 文件加载到JVM虚拟机中去 -
Java反射机制
在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够 调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的 功能就称为java语言的反射机制。通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何 东西都可以。
Class类常用类:
通过反射机制往List中添加任意类型的元素
注意:这只是演示反射机制,在正常的开发中不能这样使用