静态代码块可以对在其之后出现的静态常量进行赋值----解析

静态代码块可以将在其之后出现的静态常量进行复制

比如底下这个例子,开始确实挺难理解的,觉得是肯定是static int m=100; 先执行,因为上面的静态代码块里m未定义类型,所以我特意将底下的定义类型给注释掉看结果

public class Test {
    public static void main(String[] args) {
        A a = new A();
        System.out.println(a.m);
    }
}
class A{
    static{
        System.out.println("A类静态代码块" );
        m=200;
    }
    static int m=100;
    public A(){
        System.out.println("B类代码块");
    }
}

在这里插入图片描述

可以看到,结果如下图。我分析了一下,以下是我的见解
static int m=100
这行代码其实是执行了两个步骤

  • 1.定义了一个int类型的常量
  • 2.对其进行赋值

也就是说在为m进行初始化的时候m的初值应该是0,此时在常量池中为其开辟了空间。然后才是进行赋值操作。在赋值时,静态代码块和静态常量都是静态的,应当由上往下执行,所以m先被赋值为200,然后才执行到了m=100,这也就不难理解为啥最后输出的m是100

在这里插入图片描述

发布了43 篇原创文章 · 获赞 7 · 访问量 1737

猜你喜欢

转载自blog.csdn.net/y18791050779/article/details/104246320
今日推荐