java 静态初始化 调用_java JVM-类加载静态初始化块调用顺序

测试类加载的全过程

public class Have {

static {

System.out.println("加载Have");//先加载Have再调用main方法

}

public static void main(String[] args) throws Exception {

System.out.println("main方法"); //先调main方法

A a=new A(); //先初始化父类,再初始化子类

System.out.println(A.width);

A a2=new A(); //第二次只会调用构造器,不会调用静态方法,类的加载和初始化只有一次

System.out.println(A.common); //调用类里的常量时,并不会初始化该类,常量被放在常量池里

//Class.forName("cn.sxt.in.A"); //反射调用类,也会加载静态方法

//A[] a=new A[10]; //创建类的数组,不会初始化类

System.out.println(B.common); //子类调用父类的常量,不会初始化本身和父类

System.out.println(B.width); //子类调用父类非常量,则只会初始化父类

}

}

class A extends A_father{

public static int width=100;

public static final int common=10;

//创建对象时,会首先运行赋值动作和static块内的内容

static {

System.out.println("静态初始化类");

width=300;

}

public A(){

System.out.println("AAA");

}

}

class A_father{

static {

System.out.println("静态初始化A的父类");

}

}

class B extends A{

static {

System.out.println("静态初始化B");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值