有时在构造函数中,没有给出任何语句。这表明了什么?例如,如果我创建一个CIRCLE类,那么在类中我写CIRCLE(){},这里面没有任何内容。谁能解释一下呢?
答案 0 :(得分:7)
如果您的问题是"为什么有人会编写这样的构造函数",那么答案是如果没有指定其他构造函数,则只存在no-args默认构造函数。
考虑以下课程。
class Foo {
int x;
}
如上所述,有人可以编写以下代码来构建Foo
。
Foo foo = new Foo();
但是,现在假设我添加了一个带参数的构造函数。
class Foo {
int x;
public Foo(int x) {
this.x = x;
}
}
现在,突然,Foo foo = new Foo();
不再有效。要恢复它,我必须再次添加空构造函数。
class Foo {
int x;
public Foo(int x) {
this.x = x;
}
public Foo() { }
}
现在,如果没有其他构造函数接受参数怎么办?
在这种情况下,通常与其他答案建议一样,限制对构建课程的访问权限。
在Foo
的以下定义中,不允许任何人构建Foo
。也许Foo
仅作为静态类。
class Foo {
int x;
private Foo() { }
}
在protected
案例中,只有subclasses
可以构建Foo
。
class Foo {
int x;
protected Foo() { }
}
答案 1 :(得分:0)
如果没有写任何内容,那么当创建该类型的新对象时,没有任何额外的'已完成,而如果在构造函数中有代码,则执行某些操作。
例如,以下一个名为' Bank'分配参数' name'到该字段' bankName',然后实例化终端和2个银行帐户:
private static final int INITIAL_BALANCE = 200;
public Bank( String name )
{
bankName = name;
atm = new Terminal();
account1 = new BankAccount( INITIAL_BALANCE );
account2 = new BankAccount( INITIAL_BALANCE );
}
答案 2 :(得分:0)
如果构造函数中没有代码,则可能会声明更改对构造函数的访问权。默认情况下,构造函数是公共的。如果要将其设置为private,protected或package-private,则必须显式声明它并手动更改修饰符。
class Example {
public static void main(String[] args) {
new Demo(); //this is currently allowed
}
}
class Demo {
}
为了防止在Example中创建Demo对象,我们可以声明Demo的构造函数amd将其设为私有:
class Demo {
private Demo() { }
}
另一个原因可能是该类有一个需要参数的构造函数。如果是这样,您必须显式声明no-arg构造函数才能使用它。
答案 3 :(得分:0)
这是默认构造函数。例如,如果你去:
Circle circle = new Circle();
然后调用默认构造函数。当你去... Circle()
那是对默认构造函数的调用时,那个没有参数的那个。
这一点只是为了“构造”一个对象或实例化一个类(实例化只是意味着创建一个对象,这是一个类的实例)而没有其他信息,即参数。
这通常用于将字段初始化为默认值,如下所示:
public Circle() {
this.x = 0;
this.y = 0;
}