类的生命周期
类生命周期.png加载
查找并加载类的二进制数据。并将其放在方法区内,然后再内存中创建一个java.lang.Class对象 ,用来封装类在方法区内的数据结构
连接
-
验证
确保被加载的类的正确性 -
准备
为类的静态变量分配内存,并将其初始化为默认值 -
解析
把常量池中的符号引用转换为直接引用
初始化
为类的静态变量赋予正确的初始值
整体图.png
类的两种使用方式
主动使用
- 创建类的实例
- 访问某个类或者接口的非final的静态变量或者对该静态变量赋值
(final修改的变量必须为编译前就初始化的例如A类中常量:private statis final str = UUID.randomUUID().toString(),那么B.str就会导致A被初始化) - 调用类的静态方法
- 反射
- 初始化一个类的子类
- java虚拟机启动时被标明为启动类的类(main方法所在的类)
- jdk1.7开始提供动态语言的支持
被动使用
除了上述几种情况,其他使用java类的方式都被看做是对类的被动使用,都不会导致类的初始化。
网友评论