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