class A {
public int someVar;
someVar = 123; /* cannot find symbol */
}
为什么语言不能看到我刚刚声明的变量?这对Java来说是独一无二的,或者在所有有类OOP语言中都是如此吗?
答案 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 method
或constructor
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
只会被实例化一次,并且可以被此类