带或不带任何语句的构造函数

时间:2014-06-21 17:21:03

标签: java

有时在构造函数中,没有给出任何语句。这表明了什么?例如,如果我创建一个CIRCLE类,那么在类中我写CIRCLE(){},这里面没有任何内容。谁能解释一下呢?

4 个答案:

答案 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;
}