Java 从默认构造函数调用参数构造函数而不使用此关键字
我知道我们可以使用this关键字从同一类的另一个构造函数调用构造函数。但是不使用Java 从默认构造函数调用参数构造函数而不使用此关键字,java,constructor,Java,Constructor,我知道我们可以使用this关键字从同一类的另一个构造函数调用构造函数。但是不使用this,是否可以从默认构造函数中调用参数构造函数 我试过: class Example { int x; public Example() { Example obj = new Example(2); } public Example(int x) { this.x = x; } } 但这不允许我通过参数构造函数为
this
,是否可以从默认构造函数中调用参数构造函数
我试过:
class Example
{
int x;
public Example()
{
Example obj = new Example(2);
}
public Example(int x)
{
this.x = x;
}
}
但这不允许我通过参数构造函数为x
赋值,除非我使用getter方法从obj对象获取值。有没有一种方法可以通过只调用参数构造函数而不使用它来为x
赋值?
若否,原因为何
为什么我们不能这样做
Example(2);
不,你不能
引用JLS:
构造函数通过一系列涉及此的一个或多个显式构造函数调用直接或间接调用自身是编译时错误
你必须写:
public Example()
{
this(2); // or this.x = 2
}
你的实际问题是什么?你想做什么?我们的教授让我们想一想。如果我们可以在不使用“this”的情况下从另一个构造函数中调用构造函数。你可以使用某种初始化方法,所有构造函数都会调用它,但是你不能有final
字段,所以我不推荐它。那么最好考虑一下,而不是要求它,因为没有其他方法可以从默认构造函数调用构造函数?为什么这是一个编译时错误?@HamzaBinAmin问自己,这样做真的有意义吗?构造函数的要点是创建一个新实例。不创建多个子实例。但类似于示例(2)的内容不应该与此(2)相同吗?@HamzaBinAmin好吧,应该是这样的,但不是使用类名,而是使用this
关键字。在本例中,只有语法不同,在Java中,选择了后者。不过,我还是有点困惑。我们所说的“一系列涉及此的显式调用”是指使用此函数的构造函数彼此调用吗?因为在这种情况下,我只想通过默认值调用参数1,所以为什么会导致编译时错误?