it-swarm.com.ru

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

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

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

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

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

public Module()
{}

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

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

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

Осветление

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

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

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

public Module(){
}
31
Jim

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

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

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

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

19
kem

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

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

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

17
Koushik85

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

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

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

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

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

Пример

public class Dog
{
}

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

public class Dog{
    public Dog() {

    }
} 

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

 Dog myDog = new Dog();

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

5
Aniket Thakur

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

Если конструктор не предоставлен конструктором, компилятор неявно объявляет конструктор по умолчанию, который вызывает 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
2
Yergalem

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

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

public Module()
{
   super();
}

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

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

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

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

2
user1923551

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

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

    }
}
0
user467871

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

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

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

0
uttsav