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

32 篇文章 0 订阅
4 篇文章 0 订阅

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

比如底下这个例子,开始确实挺难理解的,觉得是肯定是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

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值