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

Ответ 1

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

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

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

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

public Module()
{}

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

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

осветление

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

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

Ответ 2

Конструктор по умолчанию создается, если вы не определяете каких-либо конструкторов в своем классе. Это просто конструктор без аргументов, который ничего не делает. Изменить: кроме вызова super()

public Module(){
}

Ответ 3

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

В спецификации языка Java Третье издание:

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

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

Ответ 4

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

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

Я прочитал эту информацию из Java Tutorials.

Ответ 5

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());
    }
}

Ответ 6

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

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

Согласно документам

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

пример

public class Dog
{
}

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

public class Dog{
    public Dog() {

    }
} 

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

 Dog myDog = new Dog();

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

Ответ 7

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

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

public Module()
{
   super();
}

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

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

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

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

Ответ 8

Конструктор

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

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

например.

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

Ответ 9

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

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

    }
}

Ответ 10

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

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

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

Ответ 11

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

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

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

Подробнее см. ссылку ниже.

https://www.javatpoint.com/constructor