gpt4 book ai didi

java - 为什么我不能在构造函数中调用非静态方法作为 this 参数?

转载 作者:行者123 更新时间:2023-11-30 11:18:08 25 4
gpt4 key购买 nike

<分区>

有效代码1:

class ClassForTest{
ClassForTest(int k){
};
ClassForTest(){
this(2);
method();
};
int method(){return 1;}
}

我的决心 - 我可以在构造函数中调用非静态方法!

无效代码

class ClassForTest{
ClassForTest(int k){
};
ClassForTest(){
this(method());
};
int method(){return 1;}
}

编译错误:

java: cannot reference this before supertype constructor has been called

有效代码2:

class ClassForTest{
ClassForTest(int k){
};
ClassForTest(){
this(method());
};
static int method(){return 1;}
}

有效代码3:

class ClassForTest{
ClassForTest(int k){
};
{
method();
}
ClassForTest(){
this(1);
};
int method(){return 1;}
}

这个行为集对我来说很奇怪。

能通俗地解释一下吗?

更新

据我了解,编译器会合并以下 init block :

constructor(){
super();
nonStaticInitBlock;
remain constructor code;
}

我没有看到为什么我不能将这个调用用作构造函数的参数的矛盾

编辑

实例初始值设定项在最后一次构造函数调用之后被调用。 – Sotirios Delimanolis 6 月 1 日 17:17

@Sotirios 你错了

研究这段代码:

public class Order {
{
System.out.println("initializer!");
}
Order(){
System.out.println("constructor");
}
public static void main(String [] args){
new Order();
}
}

结果:

initializer!
constructor

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com