JVM类加载机制
public class A{
public int age = getAge();
public static B b;
public static void main(){
b = new B();
}
public int getAge(){
return 1;
}
}

类加载的四个主要过程阶段
- 验证阶段:检验class文件是否符合jvm规范,防止被篡改
- 准备阶段:该阶段
age的值为0,b的值为null,(八种基本属性值为0,引用类型值为Null),有static final修饰的会直接赋值,例如:static final int x=10;则默认就是10
相当于申明变量,只是申请内存空间但是没有将对应的值织入 - 解析阶段:这一阶段的任务就是把常量池中的符号引用转换为直接引用,说白了就是jvm会将所有的类或接口名、字段名、方法名转换为具体的内存地址
- 初始化阶段:执行类的初始化代码,getAge()方法就在该阶段执行,另外静态代码块也在该阶段执行,如果该阶段对象有父类的话会先执行父类的初始化代码
package class08;
class Fu {
static int a; //类变量
int id;
//静态代码块
static {
a = 10;
System.out.println("这是FU的静态代码块" + a);
}
//构造代码块
{
id = 11;
System.out.println("这是FU的构造代码块id:" + id);
}
Fu() {
System.out.println("这是FU的无参构造函数");
}
}
class Zi extends Fu{
public Zi() {
System.out.println("Zi的构造函数");
}
static{
System.out.println("Zi的static代码块");
}
public static void main(String[] args) {
Zi zi = new Zi();
}
}

本文来自博客园,作者:灰原二,转载请注明原文链接:https://www.cnblogs.com/azarias/p/15054769.html

浙公网安备 33010602011771号