相关疑难解决方法(0)

当我添加"this"时,递归初始化程序是否有效?

无法编译(有illegal forward reference错误),正如人们所期望的那样:

class test {
    int x = x + 42;
}
Run Code Online (Sandbox Code Playgroud)

但这有效:

class test {
    int x = this.x + 42;
}
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?在后一种情况下分配了什么?

java

35
推荐指数
2
解决办法
827
查看次数

实例初始值设定项和*this*关键字

试图编译这段代码

public class Main {

    public static void main(String args[]) {    
        new Main();
    }

    { System.out.println(x); } //Error here

    int x=1;
}
Run Code Online (Sandbox Code Playgroud)

产生cannot reference a field before it is defined错误.但是如果我将初始化器行更改为

    { System.out.println(this.x); }
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力,打印默认的int值0.

这对我来说有点混乱,为什么会this有所不同呢?在这种情况下,它不应该是多余的吗?任何人都可以解释我幕后发生的事情,以明确它是如何工作的吗?

PS:我知道通过x在初始化程序之前声明它也可以使它工作.

java initialization

25
推荐指数
2
解决办法
849
查看次数

标签 统计

java ×2

initialization ×1