jvm 类的加载,连接与初始化

1.类的加载过程

  • 加载 :查找并加载类的二进制数据
  • 连接:
    1.验证:确保被加载的类的正确性
    2.准备:为类的静态变量分配内存,并将其初始化为默认值
    3.解析:把类的符号引用转为直接引用
  • 初始化
    为类的静态变量赋予正确的初始值

java程序对类的使用方式可分为两种

  • 主动使用
  • 被动使用

所有的java虚拟机实现必须在每个类或接口被java程序“首次主动使用”时才会被初始化他们

2.主动使用的场景

1.创建类的实例
2.访问某个类或接口的静态变量,或者对该静态变量赋值
3.调用类的静态方法
4.反射
5.初始化一个类的子类
6.Java虚拟机启动时被标明为启动类的类
7.JDK1.7开始提供的动态语言支持
除了以上七种情况,其他使用java类的方式都会被看作是对类的被动调用,都不会导致类的初始化

3.加载.class文件的方式

  • 从本地系统中直接加载
  • 从网络下载.class文件
  • 从zip jar 等归档文件中加载
  • 从转悠数据库中提取.class
  • 将java源文件动态编译为.class文件

练习题:

public class MyText{
  public static void main(String[] args){
    System.out.printIn(MyChild.str)
}
}

class MyParent{
  public static String str = "hello world";
  
  static{
    System.out.printIn("MyParent static block")
    }
}

class MyChild{
  public static String str1 = "welcome";
  
  static{
    System.out.printIn("MyChildstatic block")
    }
}

你可能感兴趣的:(jvm 类的加载,连接与初始化)