为什么分配刚刚声明的类变量是非法的?

1de*_*der 1 java oop class

class A {
    public int someVar;
    someVar = 123;      /* cannot find symbol */
}
Run Code Online (Sandbox Code Playgroud)

为什么语言不能看到我刚刚声明的变量?这对Java来说是独一无二的,或者在所有有类OOP语言中都是如此吗?

rge*_*man 9

在Java中,您可以在类中但在方法之外声明实例变量,但是语句someVar = 123;必须在方法(或构造函数,静态初始化程序或实例初始化程序)中.


Tom*_*m G 6

您不能在类定义中包含任意语句.您可以在声明中立即分配变量:

public int someVar = 123;
Run Code Online (Sandbox Code Playgroud)

或者,在构造函数或其他实例范围中分配它:

public class A {
  public int someVar;

  public A() {
    someVar = 123;
  }
}
//Or...
public class B {
  public int someVar;
  { someVar = 123; }
}
Run Code Online (Sandbox Code Playgroud)

请注意,第二种技术使用实例初始化程序,它并不总是最直接清晰的代码.