空构造函数的必要性

时间:2014-09-21 15:59:15

标签: java

我尝试运行以下代码,这会给我一个constructor A in class A cannot be applied to given types错误。

class A{
    int a;
    A(int b){
        a = b;
    }
}

public static void main (String[] args) throws java.lang.Exception
{
    A a = new A();
    System.out.println(a.a);
}

如果我从类A中删除了c'tor,但代码按预期运行(并输出0)。似乎如果存在另一个c'tor,则没有默认的c'tor(并且只有在写入时才会出现更少的参数)。我对么? 更重要的是,为什么会这样?

2 个答案:

答案 0 :(得分:2)

如果你没有创建一个构造函数,那么默认情况下会有一个构造函数,如下所示

public YourClass(){

}

但是如果你创建一个像下面这样的构造函数:

public YourClass(int x){

}

那么你默认没有构造函数,即

public YourClass(){
//this won't exist
}

所以你必须这样做

YourClass anObject = new YourClass(5);//you can do this.

因此你不能做像

这样的事情
YourClass anObject = new YourClass();//you cannot do this

为了做到这一点,你需要自己创建一个构造函数

public YourClass(){
//this time you must create this
}

对于问题为什么?,我怀疑是否有任何理由。这就是OOP的移动方式。

答案 1 :(得分:1)

一旦你定义了一个非空的构造函数,非空的构造函数就不是隐含的,你必须明确它。

public A() {
}