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

时间:2013-09-03 20:05:22

标签: java class oop

class A {
    public int someVar;
    someVar = 123;      /* cannot find symbol */
}

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

5 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:6)

您不能在类定义中拥有任意语句。您可以在声明中立即分配变量:

public int someVar = 123;

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

public class A {
  public int someVar;

  public A() {
    someVar = 123;
  }
}
//Or...
public class B {
  public int someVar;
  { someVar = 123; }
}

请注意,第二种技术使用instance initializer,这并不总是最直接的代码。

答案 2 :(得分:2)

您无法直接在课堂上声明someVar = 123;语句 它应为instance阻止或in methodconstructor

 class A {
    public int someVar = 123;
}

class A {

    public int someVar ;
    {
          somevar = 123;
    }
}

class A {

        public int someVar ;
        A(){
              somevar = 123;
        }
    }

class A {

        public int someVar ;
        public void method(){
              somevar = 123;
        }
    }

答案 3 :(得分:1)

但奇怪的是,你可以编码

public class AFunnyClass {
    public int someVar;
    {
        someVar = 123;
    }
    public static int anotherVar;
    static {
        anotherVar = 456;
    }
    public int yetAnotherVar = 789;
    public static int adNauseum = 101112;
}

答案 4 :(得分:0)

也许您想将someVar用作静态变量。 然后你应该声明它也是静态的。使用它像:

class A {
    static public int someVar = 123; 
}

这意味着someVar不仅仅是这个Class的一个实例的成员,它也成为了它自己的类的成员。这也意味着someVar只会被实例化一次,并且可以被此类

的所有实例使用