Конструктор по умолчанию Java

что такое конструктор по умолчанию - можете ли вы сказать мне, какой из следующих является конструктором по умолчанию и что отличает его от любого другого конструктора?

public Module() {
   this.name = "";
   this.credits = 0;
   this.hours = 0;
}

public Module(String name, int credits, int hours) {
   this.name = name;
   this.credits = credits;
   this.hours = hours;
}

11 ответов


ни один из них. Если вы определяете его, это не значение по умолчанию.

конструктор по умолчанию-конструктор без аргументов автоматически, если не определен другой конструктор. Все неинициализированные поля будут иметь значения по умолчанию. Для вашего примера это будет выглядеть так, если предположить, что типы String, int и int:

public Module()
{
  super();
  this.name = null;
  this.credits = 0;
  this.hours = 0;
}

Это точно так же, как

public Module()
{}

и точно так же, как отсутствие конструкторов на все. Однако при определении хотя бы одного конструктора конструктор по умолчанию не создается.

ссылки: Спецификация Языка Java

уточнение

технически это не конструктор (по умолчанию или иначе), что по умолчанию инициализирует поля. Однако я оставляю это в ответе как

  • вопрос получил неправильные значения по умолчанию и
  • , включая их или нет, конструктор точно такой же эффект.

конструктор по умолчанию создается, если вы не определяете конструкторы в своем классе. Это просто конструктор аргументов no, который ничего не делает. Edit: кроме вызова super ()

public Module(){
}

конструктор по умолчанию автоматически генерируется компилятором, если вы явно не определяете хотя бы один конструктор в своем классе. Вы определили два, поэтому ваш класс не имеет конструктора по умолчанию.

Per Спецификация Языка Java Третье Издание:

8.8.9 Конструктор По Умолчанию

Если класс содержит конструктор деклараций, по умолчанию конструктор без параметров предоставляется автоматически...


Привет. Согласно моим знаниям, позвольте мне очистить концепцию конструктора по умолчанию:

компилятор автоматически предоставляет конструктор по умолчанию без аргументов для любого класса без конструкторов. Этот конструктор по умолчанию вызовет конструктор без аргументов суперкласса. В этой ситуации компилятор будет жаловаться, если суперкласс не имеет никаких аргументов конструктор поэтому вы должны убедиться, что это так. Если у вашего класса нет явный суперкласс, тогда это имеет неявный суперкласс Object, который имеет конструктор без аргументов.

Я прочитал эту информацию из Java Учебники.


Java предоставляет конструктор по умолчанию, который не принимает аргументов и не выполняет никаких специальных действий или инициализаций, когда не предоставляются явные конструкторы.

единственным действием неявного конструктора по умолчанию является вызов конструктора суперкласса с помощью вызова super (). Аргументы конструктора предоставить вам способ передачи параметров для инициализации объекта.

Ниже приведен пример класса Куба, содержащего 2 конструктора. (один по умолчанию и конструктор с параметрами).

public class Cube1 {
    int length;
    int breadth;
    int height;
    public int getVolume() {
        return (length * breadth * height);
    }

    Cube1() {
        length = 10;
        breadth = 10;
        height = 10;
    }

    Cube1(int l, int b, int h) {
        length = l;
        breadth = b;
        height = h;
    }

    public static void main(String[] args) {
        Cube1 cubeObj1, cubeObj2;
        cubeObj1 = new Cube1();
        cubeObj2 = new Cube1(10, 20, 30);
        System.out.println("Volume of Cube1 is : " + cubeObj1.getVolume());
        System.out.println("Volume of Cube1 is : " + cubeObj2.getVolume());
    }
}

общая терминология заключается в том, что если вы не предоставляете какой-либо конструктор в своем объекте, конструктор аргументов автоматически не помещается, который называется конструктором по умолчанию.

Если вы определяете конструктор такой же, как тот, который будет размещен, если вы не предоставите его, он обычно называется конструктором без аргументов.Просто соглашение, хотя некоторые программисты предпочитают называть это явно определенным конструктором аргументов как конструктор по умолчанию. Но если мы перейдите по именованию, если мы явно определяем один, чем он не делает его по умолчанию.

на docs

если класс не содержит объявлений конструктора, неявно объявляется конструктор по умолчанию без формальных параметров и предложения throws.

пример

public class Dog
{
}

будет автоматически изменен (путем добавления конструктора по умолчанию) следующим образом

public class Dog{
    public Dog() {

    }
} 

и когда вы создаете это объект

 Dog myDog = new Dog();

этот конструктор по умолчанию вызывается.


Если класс не имеет конструктора, предоставленного программистом, то компилятор java добавит конструктор по умолчанию с параметрами out, который вызовет конструктор супер класса внутренне с вызовом super (). Это называется конструктором по умолчанию.

в вашем случае, нет конструктора по умолчанию, как вы добавляете их программно. Если нет конструкторов, добавленных вами, то созданный компилятором конструктор по умолчанию будет выглядеть так этот.

public Module()
{
   super();
}

Примечание: в боковом конструкторе по умолчанию он также добавит вызов super (), чтобы вызвать конструктор супер класса.

цель добавления конструктора по умолчанию:

обязанность конструктора-инициализировать переменные экземпляра, если нет переменных экземпляра, которые вы можете выбрать для удаления конструктора из своего класса. Но когда вы наследуете какой-то класс, ваша ответственность за класс-вызвать конструктор супер класса, чтобы сделать убедитесь,что super class правильно инициализирует все переменные экземпляра.

вот почему, если нет конструкторов, компилятор java добавит конструктор по умолчанию и вызовет конструктор супер класса.


конструктор по умолчанию ссылается на конструктор, который автоматически генерируется компилятором при отсутствии каких-либо конструкторов, определенных программистом.

Если нет конструктора, предоставленного программистом, компилятор неявно объявляет конструктор по умолчанию, который вызывает super(), не имеет предложения throws, а также никаких формальных параметров.

Э. Г.

class Klass {
      // Default Constructor gets generated
} 

new Klass();  // Correct
-------------------------------------

class KlassParameterized {

    KlassParameterized ( String str ) {   //// Parameterized Constructor
        // do Something
    }
} 

new KlassParameterized(); //// Wrong  - you need to explicitly provide no-arg constructor. The compiler now never declares default one.


--------------------------------

class KlassCorrected {

    KlassCorrected (){    // No-arg Constructor
       /// Safe to Invoke
    }
    KlassCorrected ( String str ) {   //// Parameterized Constructor
        // do Something
    }
} 

new KlassCorrected();    /// RIGHT  -- you can instantiate

конструктор по умолчанию не принимает никаких аргументов:

public class Student { 
    // default constructor
    public Student() {   

    }
}

когда мы явно не определяем конструктор для класса, java создает конструктор по умолчанию для класса. Это, по сути, не параметризованный конструктор, т. е. он не принимает никаких аргументов.

задача конструктора по умолчанию-вызвать конструктор супер класса и инициализировать все переменные экземпляра. Если конструктор супер класса отсутствует, он автоматически инициализирует переменные экземпляра до нуля. Таким образом, это служит цели использования конструктор, который должен инициализировать внутреннее состояние объекта, чтобы код, создающий экземпляр, имел полностью инициализированный полезный объект.

когда мы определяем наш собственный конструктор класса, конструктор по умолчанию больше не используется. Таким образом, ни один из них не является конструктором по умолчанию.


Я надеюсь, что вы получили свой ответ относительно того, какой конструктор по умолчанию. Но я даю ниже заявления, чтобы исправить приведенные комментарии.

  • Java не инициализирует локальную переменную для любого значения по умолчанию. Так если вы создаете объект класса, он будет вызывать по умолчанию конструктор и предоставляет объекту значения по умолчанию.

  • конструктор по умолчанию значения по умолчанию для объекта, как Ноль, значение null и т. д. в зависимости от типа.

пожалуйста см. ниже связь для больше деталей.

https://www.javatpoint.com/constructor