java 静态变量初始化为什么要用静态初始化块

时间:2021-08-19 19:48:04
举个例子
static int i;
static{
i = 0;
}
为什么不能写成
static int i;
i = 0;

7 个解决方案

#1


你第二个例子编译器会报错吗?

#2


好象静态变量必须在定义时初始化的,静态变量值是不能被改变的

#3


引用 1 楼 woshishuiaaaD 的回复:
你第二个例子编译器会报错吗?

#4


引用 2 楼 dantu163 的回复:
好象静态变量必须在定义时初始化的,静态变量值是不能被改变的

可以啊,final修饰的才不能被修改。。。

#5


因为 它属于类啊, 没有实例之前就可以使用这个变量啊

比如类名A.  int b = A::i;   这时还没A的实例呢。

而一般初始化块(不是静态初始化块),必须在有创建实例的时候,才会执行。

#6


static i = 0;合起来就好了...

#7


要不就static int i = 0;
要不就static int i ; 然后 i 在主函数里或者方法内赋值 . 

放在静态块内有一个好处 , 就是当需要当用类的时候就会加载静态快里面的内容, 不需要创建对象的. 很方便

#1


你第二个例子编译器会报错吗?

#2


好象静态变量必须在定义时初始化的,静态变量值是不能被改变的

#3


引用 1 楼 woshishuiaaaD 的回复:
你第二个例子编译器会报错吗?

#4


引用 2 楼 dantu163 的回复:
好象静态变量必须在定义时初始化的,静态变量值是不能被改变的

可以啊,final修饰的才不能被修改。。。

#5


因为 它属于类啊, 没有实例之前就可以使用这个变量啊

比如类名A.  int b = A::i;   这时还没A的实例呢。

而一般初始化块(不是静态初始化块),必须在有创建实例的时候,才会执行。

#6


static i = 0;合起来就好了...

#7


要不就static int i = 0;
要不就static int i ; 然后 i 在主函数里或者方法内赋值 . 

放在静态块内有一个好处 , 就是当需要当用类的时候就会加载静态快里面的内容, 不需要创建对象的. 很方便