java静态变量不能访问,java-为什么静态块无法访问其后定义的静态变量

为什么静态块可以分配在其后声明的静态变量但不能访问它?

class Parent {

static {

i = 2; // valid

// can only assign new value to it instead of accessing it?

// System.out.println(i); // invalid - compile-error

}

static int i = 0;

static {

i = 3; // valid

}

}

是否由于以下事实造成的:该值尚未初始化,因此我们只是明确禁止您使用它?还是有我不知道的与安全相关的东西?

更新

这不是那个问题的重复

Why this doesn’t happen when accessing with class name?

这个问题是关于为什么我们要有这种设计?出于什么目的?

解决方法:

静态字段根据它们在代码中出现的顺序进行初始化.

因此,当您为i变量赋值时,您只是对编译器说:“嘿,伙计,当您初始化该变量时,请将其值设置为…”.但是您不能使用它,直到它被初始化,因为它根本不存在.

更新:

正如James Gosling,Bill Joy,Guy Steele和Gilad Bracha在“ Java语言规范”一书中所说的:

These restrictions are designed to catch, at compile time, circular or

otherwise malformed initializations.

考虑一下:

static {

i = 2;

j = i + 5; //should it be 7 or 15?

}

static int i = 10;

static int j;

j变量应该是7还是15?

如果为7,则由于变量字段是静态的,因此我们已经两次将i变量初始化了,这是不可能的.如果是15,那么我= 2?意思?

该代码不明确,因此Java规范不允许这样做.

标签:static-block,java-8,static,java

来源: https://codeday.me/bug/20191108/2006114.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值