我理解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) {
}
答案 0 :(得分:0)
System.getenv()
不是语句,它是一个初始化表达式,用作字段声明的一部分。在任何方法之外的上下文中允许字段声明 - 实际上,这是字段声明可以进行的唯一位置。初始化表达式附加到声明中,因此,当然也允许它们。
System.out.println
不是声明,因此不允许在函数或初始化块之外。
答案 1 :(得分:-1)
这是因为私有静态最终Map INVALID_FILTER_KEY = System.getenv()是私有类实例变量。这些实例变量可以在类中的任何位置使用,因此在任何方法之外声明。在方法内声明的变量只能在该方法中使用。调用System.out.println时出现问题的原因是因为这是实际的可执行代码,并且要运行实际代码,它需要在方法内部。考虑一下本教程,了解它在java类https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
中的工作原理