代码块之外的Java System语句

时间:2017-06-16 15:31:19

标签: java core

我理解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)  {


    }

2 个答案:

答案 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

中的工作原理