是声明的默认构造函数是必须的吗?

时间:2014-03-19 06:50:16

标签: java

我们都知道JVM在每个java程序中为我们提供了一个默认构造函数。

但是如果我们声明任何其他类型的构造函数,那么它就不会提供任何类型的默认构造函数。

所以,我的问题是,当我们在程序中声明任何其他类型的构造函数时,必须声明默认构造函数。

如果是,那么解释为什么? 如果否,那么也解释为什么?

为解决方案提供适当的合适示例。

7 个答案:

答案 0 :(得分:1)

不,这根本不是强制性的。有很多类没有默认构造函数,没有什么能阻止你编写自己的构造函数。我想到的是java.awt.Color

答案 1 :(得分:1)

声明默认构造函数取决于业务需求,从技术上讲,它不是强制性的。

如果你想只用一组参数初始化一个类,那么你可以跳过默认的构造函数,它确实迫使你 - 给出创建对象所需的值

例如,

public class ClassA {

String name;
ClassA(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

对于上述课程,如果你想这样做,

ClassA obj = new ClassA();

这是不可能的,因为没有默认构造函数。

ClassA obj = new ClassA("name");

以上是创建对象的唯一方法,因为name是应该给出的参数。

如果要创建两者,请将默认构造函数添加为

ClassA() {}

提供了使用out name创建对象的方法。

答案 2 :(得分:1)

不,这不是cumpolsory。

class Dog {

Dog(String name)
{
 system.out.println("Dog :" + name);
}
public static void main(String[] args)
{
 Dog d = new Dog("dollar"); // works fine
 Dog d2 = new Dog() // error , no default constructor defined for Dog
}
}

答案 3 :(得分:1)

  

所以,我的问题是,必须声明默认值   当我们在我们中声明任何其他类型的构造函数时的构造函数   程序

不,没有必要拥有默认构造函数。

  

如果否,那么也解释为什么?

默认构造函数将由Compiler提供,仅当您没有定义任何无参数的构造函数时。但是,请记住以下内容,从JLS

检查模式
  

<强> 8.8.9。默认构造函数

     

如果类不包含构造函数声明,则为默认值   没有形式参数且没有throws子句的构造函数   隐含地宣布。

     

如果声明的类是原始类Object,那么   默认构造函数有一个空体。否则,默认   构造函数只调用没有的超类构造函数   参数。

     

如果默认构造函数是隐式的,则是编译时错误   声明但超类没有可访问的构造函数   (§6.6)不带参数且没有抛出条款。

答案 4 :(得分:0)

不,这不是强制性的! 但是如果你没有默认的构造函数(无参数构造函数),并且你想要以这种形式创建类的对象

A ref = new A();

然后你可能无法做到。

答案 5 :(得分:0)

没有必要创建默认构造函数,但最好是创建默认构造函数 如果要重用您的类,那么不创建默认构造函数将限制您的类的可重用性 就像一个类正在扩展该类一样,派生类必须具有显式的超级调用。

请考虑以下示例: -

class Base
{
    public Base(int x){
        //some statements
    }
    /*
       some methods
    */
}

class Derived
{
    // only one of the following will be used
    public Derived(){  // This will cause a compile-time error
      //some statements
    }
    public Derived(){  // This will work fine
     //some statements
        super(x);
    }
    /*
      some methods
    */
}

这背后的原因是,如果基类没有默认构造函数,那么派生类必须在其所有构造函数声明中调用相应的super()。但是如果我们在基类中有一个默认构造函数,那么对super()的调用不是强制性的。

答案 6 :(得分:0)

不,这不是必需的。

让我解释为什么这不是必要的                   您提出的问题似乎是构造函数重载。

         If you create an or many parameterized constructor in java then you do need need to be worried for the default constructor. 

基本上构造函数用于初始化实例变量或类成员或执行初步任务,如果您已经使用另一个构造函数完成了此操作,则不需要另一个构建函数,但如果您愿意,则可以执行此操作。 / p>

公共类基地{     int a;

public base(int x)
{
    this.a=x;
    System.out.println(x);
}
public base()
{
    System.out.println("abc");
}

public static void main(String []a)
{
    base b=new base();
    b=new base(4);
}

}

输出结果为: -

ABC 4