关于静态代码块和静态变量加载的顺序

在类进行加载的时候分为三个大的阶段,加载,链接,初始化。其中链接又分为,验证,准备,解析。

类变量(静态变量)是在准备阶段进行加载的,在该阶段为类变量分配内存并且设置初始值,下图为初始值

char= 
boolean=false
double=0.0
float=0.0
int=0
long=0
short=0
byte=0

然后在初始化阶段为其赋值,而执行顺序则是按照变量和静态代码块声明的顺序。

演示代码如下

public class Test2 {
    static{
       // System.out.println(a);Error:(5, 28) java: 非法前向引用
        System.out.println("这是静态代码块开始----");
        b=8;
        print();
        System.out.println("这是静态代码块结束----");
    }
    static int a=2;
    static int b=4;

    public static void print(){
        System.out.println("这是静态方法print ");
        System.out.println("{");
        System.out.println("  a="+a);//0   因为i才刚初始化默认值为0,还没有执行到下面的赋值 a=2
        System.out.println("  b="+b);//8   因为j在初始化后被赋值为8
        System.out.println("}");
    }
    public static void main (String args[]) {
        new Test2();

        System.out.println("a="+Test2.a);
        System.out.println("b="+Test2.b);
    }
}

执行结果如下:

这是静态代码块开始----
这是静态方法print 
{
  a=0
  b=8
}
这是静态代码块结束----
a=2
b=4

 

因为静态代码块定义在最前面,所以在代码块里面a还没有被赋值,还是自己的初始值为0,而j从初始化0变成了8

在执行完静态代码块后,a和b进行了再次赋值成了a=2 b=4

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值