【发布时间】:2020-07-18 05:08:35
【问题描述】:
我是 Java 新手,我试图理解将变量定义为静态和在静态块中包含变量之间的区别。我制定了一个简化的例子来说明我的困惑:
import java.util.Properties;
public class Foo {
static Properties myProps = new Properties();
static {
Properties myOtherProps = new Properties();
}
public static void bar() {
Foo.myProps.forEach(myProps::put); // Works just fine
Foo.myOtherProps.forEach(myProps::put); // Throws cannot find symbol error
}
}
静态变量myProps 似乎被bar() 方法正常引用,而myOtherProps 不能从该部分代码中引用。
在静态代码块中包装代码与将变量定义为静态之间有什么区别?
【问题讨论】:
-
如果我被否决了,我至少可以理解为什么吗?
-
static {}块不是一种无需为每个字段显式键入“静态”即可声明多个静态字段的机制。它是一个“静态初始化程序”,在类本身初始化时执行(在加载后但首次使用之前的某个时间发生)。您可以将任意代码放入初始化程序块中,但该代码的范围仅限于所述块。你得到的编译错误与你在一个方法中声明一个变量然后尝试在其他方法中访问它没有什么不同。
标签: java