Java 为什么在类中的方法外重新初始化变量是错误的?为什么编译器不能读取并重新为其赋值?

Java 为什么在类中的方法外重新初始化变量是错误的?为什么编译器不能读取并重新为其赋值?,java,Java,就像这里为什么重新初始化变量i是一个错误 class deleteme { int i=5; i=33; public static void main(String args[]) { } } 这就是所谓的(*) 这是一种 语句s只能出现在语句内部(尽管块s可以出现在语句s内部) 类声明不是块,因此不能在那里使用语句,除非将其包装在块中(例如,方法体或初始值设定项) 唯一可以直接在内部发生的事情是: (*)实

就像这里为什么重新初始化变量i是一个错误

class deleteme
{
        int i=5;
        i=33;
        public static void main(String args[])
        {

        }
}
这就是所谓的(*)

这是一种

语句
s只能出现在语句内部(尽管
s可以出现在
语句
s内部)

类声明不是
,因此不能在那里使用
语句
,除非将其包装在块中(例如,方法体或初始值设定项)

唯一可以直接在内部发生的事情是:


(*)实际上它什么都不是,因为它不是有效的语法。如果在
块中出现完全相同的行
,则它将是
表达式语句


这两条线之间的哲学区别:

    int i=5;
    i=33;

第一个是“宣布”某事,而第二个是“做”某事。你只能在块内“做”。

答案很简单:因为这不是语言的语法。不能在类级别执行任意操作。您希望在什么时候执行此类操作?唯一合乎逻辑的时间是对象构造时。在这种情况下,把你的代码放在一个构造函数中(尽管有一个问题,为什么不首先将它初始化为33)。
ClassBody:
  { {ClassBodyDeclaration} }

ClassBodyDeclaration:
  ClassMemberDeclaration
  InstanceInitializer
  StaticInitializer
  ConstructorDeclaration

ClassMemberDeclaration:
  FieldDeclaration
  MethodDeclaration
  ClassDeclaration
  InterfaceDeclaration
    int i=5;
    i=33;