在Java中,静态块内声明的变量的作用域是什么?

16

在静态块内声明的变量能否在其他地方访问? 这些变量属于哪种成员(例如,它们也是静态成员吗?)

4个回答

14
一般来说,程序员不需要在静态块内声明任何变量,通常这只是为了确保静态变量的初始化可供类的所有实例使用(取决于静态变量的范围)。
在静态块中声明的变量将像方法和构造函数变量一样局部于该块。 JDK文档

通常程序员不需要在静态块中声明任何变量。为什么呢?如果你需要临时的对象来保存数据,你可以在静态块中声明变量。想象一种情况,在进行算术运算后需要实例化一个静态字段,并希望让代码可读性更强。static float radius; static float area; static { final float PI = 3.14f; area = (float) (PI * Math.pow(radius, 2)); } - realPK

10

在块内声明的变量只能在该块内部访问,不管是否为静态。

在静态方法中声明的变量是静态的。它们只能访问其他静态变量或全局变量。


但是,与C/C++的本地变量不同,这些变量在块执行后并没有真正“超出范围”,对吗? - One Two Three
2
变量在块中的作用域就是该块。执行完毕后,您无法访问这些变量。这就是变量超出作用域的含义。静态块只执行一次,因此您也无法重新进入它。通常,在类加载并运行任何构造函数之前,使用静态块来初始化类中的静态字段。静态字段具有您给予它们的作用域:公共、包保护、受保护、私有。 - Jilles van Gurp

4
他们类似于方法变量,只能在块级作用域中访问。

0

不,它们在块外部不可见。它们的行为类似于局部变量——将静态块视为在类初始化时调用的匿名函数。它们不是静态成员。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接