代码块之外的 Java 系统语句



我理解java中的任何语句都应该在代码块中。 但我在下面的代码中看到 System.getenv((;未放置在代码块中。但是如果我在下面放一个System.out.println((,编译器会抱怨。System.getenv(( 在这里被视为声明而不是语句吗?

package gov.ssa.epa;
public class AdvJ {
    private static final Map<String, String> INVALID_FILTER_KEY = System.getenv();
    System.out.println("hello");
    public static void main(String[] args)  {

    }

System.getenv() 不是语句,而是用作字段声明一部分的初始化表达式。字段声明允许在任何方法之外的上下文中使用 - 事实上,这是字段声明可以放置的唯一位置。初始化表达式附加到声明中,因此自然也允许它们。

另一方面,System.out.println不是声明,因此不允许在函数或初始化块之外使用。

这是因为私有静态最终映射INVALID_FILTER_KEY = System.getenv(( 是一个私有类实例变量。这些实例变量可以在类中的任何位置使用,因此可以在任何方法外部声明。在方法中声明的变量只能在该方法中使用。调用System.out.println时出现问题的原因是,这是实际的可执行代码,并且要运行实际代码,它需要在方法中。考虑查看本教程,了解它在 Java 类中的工作方式 https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

最新更新