Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么分配刚声明的类变量是非法的?_Java_Class_Oop - Fatal编程技术网

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

Java 为什么分配刚声明的类变量是非法的?,java,class,oop,Java,Class,Oop,为什么语言看不到我刚才声明的变量?这是Java独有的还是在所有类式OOP语言中都是如此?在Java中,您可以在类内声明实例变量,但在方法外声明实例变量,但语句如someVar=123必须在方法(或构造函数、静态初始值设定项或实例初始值设定项)内。在Java中,可以在类内声明实例变量,但在方法外声明实例变量,但声明语句如下someVar=123必须在方法(或构造函数、静态初始值设定项或实例初始值设定项)中。类定义中不能有任意语句。您可以立即在声明中指定变量: class A { publi

为什么语言看不到我刚才声明的变量?这是Java独有的还是在所有类式OOP语言中都是如此?

在Java中,您可以在类内声明实例变量,但在方法外声明实例变量,但语句如
someVar=123必须在方法(或构造函数、静态初始值设定项或实例初始值设定项)内。

在Java中,可以在类内声明实例变量,但在方法外声明实例变量,但声明语句如下
someVar=123必须在方法(或构造函数、静态初始值设定项或实例初始值设定项)中。

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

class A {
    public int someVar;
    someVar = 123;      /* cannot find symbol */
}
或者,将其分配到构造函数或其他实例范围:

public int someVar = 123;

请注意,第二种技术使用的是,它并不总是最清晰的代码。

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

class A {
    public int someVar;
    someVar = 123;      /* cannot find symbol */
}
或者,将其分配到构造函数或其他实例范围:

public int someVar = 123;

请注意,第二种技术使用的是,它并不总是最清晰的一段代码。

您不能声明
someVar=123语句。
它应该是
实例
块或
方法
构造函数

public class A {
  public int someVar;

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


不能声明
someVar=123语句。
它应该是
实例
块或
方法
构造函数

public class A {
  public int someVar;

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


但奇怪的是,您可以编写代码

class A {

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

但奇怪的是,您可以编写代码

class A {

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

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

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

这意味着someVar不仅仅是这个类实例的一个成员,它本身也成为了这个类的一个成员。这也意味着
someVar
将只实例化一次,并且可以被此类的所有实例使用

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

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


这意味着someVar不仅仅是这个类实例的一个成员,它本身也成为了这个类的一个成员。这也意味着
someVar
将只实例化一次,并且可以被此类的所有实例使用

类主体不能包含可执行代码。@SotiriosDelimanolis no,false;您可以编写
public Foo Foo=new Foo()
,构造函数包含任意代码。@djechlin这是一个实例初始化语句。看一看它与可执行代码不同。@djechlin是对象初始化,这是Java独有的还是适用于所有OOP语言?类主体不能包含可执行代码。@SotiriosDelimanolis否,false;您可以编写
public Foo Foo=new Foo()
,构造函数包含任意代码。@djechlin这是一个实例初始化语句。看一看它与可执行代码不同。@djechlin是对象初始化,那么这是Java独有的还是适用于所有OOP语言?+1,但将添加它们也可能在初始化中block@Kon是的,我已经添加到我的答案中以使其更完整。+1,但将添加它们也可能在初始化范围内block@Kon对我已经添加到我的答案中,使其更加完整。或者
public int-somevar=123
公共int-somevar=123是,使用实例初始值设定项和静态初始值设定项。是,使用实例初始值设定项和静态初始值设定项。