代码块外的Java系统语句

代码块外的Java系统语句,java,core,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.g

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


    }
package gov.ssa.epa;
公共类广告{
私有静态最终映射无效_FILTER_KEY=System.getenv();
System.out.println(“你好”);
公共静态void main(字符串[]args){
}
System.getenv()
不是一个语句,它是一个初始化表达式,用作字段声明的一部分。在任何方法之外的上下文中都允许字段声明-事实上,这是字段声明可以使用的唯一地方。初始化表达式附加到声明中,因此,自然也允许它们


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

这是因为私有静态最终映射无效\u FILTER\u KEY=System.getenv()是一个私有类实例变量。这些实例变量可以在类中的任何位置使用,因此在任何方法外声明。在方法内声明的变量只能在该方法中使用。调用System.out.println时出现问题的原因是,这是实际的可执行代码,对于要运行的实际代码考虑到该方法在java类< /p>中如何工作,该类型的静态赋值是合法的。它与<代码>私有静态int x=5没有区别。< /代码>任何给定的语句都不可能。允许在代码块之外进行内联初始化,但<代码> > So.out。“hello”);不是一个初始化语句对于所有害怕的人来说,学会正确格式化代码,如果你这样做了,你就会明白为什么会这样。这与重复的问题相反:OP不是问“为什么我不能在方法外使用语句”,而是问“为什么我可以使用语句?”“。投票重新打开。像往常一样,如果出现更好的副本,请在评论中标记我,我将很乐意重新关闭该问题。我认为System.getenv()是一个语句。只是语句被允许作为初始化表达式的一部分?我确实查过了,我只是出于礼貌。从维基百科——在计算机编程中,语句是命令式编程语言中最小的独立元素,表示要执行的一些操作。获取环境似乎是atch此说明,否?某些类型的语句有断言、赋值、转到、返回和(如本例中的)调用。@Sam这不是一个语句。虽然方法中允许声明局部变量的声明语句,并且它们看起来可能完全相同,但字段声明不被视为语句。