java的为静态变量不赋值_java – 为什么最终的静态变量不能在实例块中赋值?...

因为它是静态final,所以它必须在静态上下文中初始化一次 – 声明变量时或在

static initialization block中.

static {

name = "User";

}

编辑:静态成员属于该类,非静态成员属于该类的每个实例.如果要在实例块中初始化静态变量,则每次创建该类的新实例时都会初始化它.这意味着它在此之前不会被初始化,并且可以多次初始化.由于它是静态的和最终的,因此必须初始化一次(对于该类,而不是每个实例一次),因此您的实例块将不会.

EDIT2:以下是可能有助于您理解的示例.

class Test {

private static final int a;

private static int b;

private final int c;

private int c;

// runs once the class is loaded

static {

a = 0;

b = 0;

c = 0; // error: non-static variables c and d cannot be

d = 0; // referenced from a static context

}

// instance block, runs every time an instance is created

{

a = 0; // error: static and final cannot be initialized here

b = 0;

c = 0;

d = 0;

}

}

所有未注释的行都有效.如果我们有

// instance block

{

b++; // increment every time an instance is created

// ...

}

然后b将作为创建的实例数的计数器,因为它是静态的并且在非静态实例块中递增.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值