Конструктор по умолчанию 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;
}
806   11  

11 ответов:

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

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

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

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

public Module()
{}

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

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

уточнение

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

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

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

public Module(){
}

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

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

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

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

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

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

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

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 (), чтобы вызвать конструктор суперкласса.

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

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

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

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

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

например.

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

Comments

    Ничего не найдено.