Что такое конструктор в Java?
CONSTRUCTOR - это специальный метод, который используется для инициализации вновь созданного объекта и вызывается сразу после выделения памяти для объекта. Его можно использовать для инициализации объектов желаемыми значениями или значениями по умолчанию во время создания объекта. Кодировщику не обязательно писать конструктор для класса.
Если для класса не предусмотрен пользовательский конструктор, компилятор инициализирует переменные-члены значениями по умолчанию.
- числовые типы данных установлены на 0
- для типов данных char задан нулевой символ ('\ 0')
- ссылочные переменные имеют значение null
В этом руководстве вы узнаете:
- Правила создания конструктора
- Перегрузка конструктора в Java
- Конструктор цепочки
Правила создания конструктора Java
- Он имеет то же имя, что и класс
- Он не должен возвращать даже недействительное значение.
Пример 1. Создайте свой первый конструктор на Java
Шаг 1) Введите следующую программу-конструктор в редакторе Java.
class Demo{int value1;int value2;Demo(){value1 = 10;value2 = 20;System.out.println("Inside Constructor");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);}public static void main(String args[]){Demo d1 = new Demo();d1.display();}}
Шаг 2) Сохраните, запустите и скомпилируйте программу-конструктор на Java и просмотрите результат.
Выход:
Inside ConstructorValue1 === 10Value2 === 20
Перегрузка конструктора в Java
Перегрузка конструктора Java - это метод, при котором класс может иметь любое количество конструкторов, различающихся списком параметров. Компилятор различает эти конструкторы, принимая во внимание количество параметров в списке и их тип.
Примеры допустимых конструкторов для класса Account:
Account(int a);Account (int a,int b);Account (String a,int b);
Пример 2 : понимание перегрузки конструктора в Java
Шаг 1) Введите код в редакторе.
class Demo{int value1;int value2;/*Demo(){value1 = 10;value2 = 20;System.out.println("Inside 1st Constructor");}*/Demo(int a){value1 = a;System.out.println("Inside 2nd Constructor");}Demo(int a,int b){value1 = a;value2 = b;System.out.println("Inside 3rd Constructor");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);}public static void main(String args[]){Demo d1 = new Demo();Demo d2 = new Demo(30);Demo d3 = new Demo(30,40);d1.display();d2.display();d3.display();}}
Шаг 2) Сохраните, скомпилируйте и запустите код.
Шаг 3) Ошибка =?. Попробуйте отладить ошибку, прежде чем переходить к следующему шагу перегрузки конструктора Java.
Шаг 4) Каждый класс имеет конструктор по умолчанию в Java. Перегружаемый конструктор Java по умолчанию для класса Demo - Demo () . Если вы не предоставили этот конструктор, компилятор создаст его для вас и инициализирует переменные значениями по умолчанию. Вы можете переопределить этот конструктор по умолчанию и инициализировать переменные желаемыми значениями, как показано в Примере 1.
Но если вы указываете параметризованный конструктор, например Demo (int a), и хотите использовать конструктор по умолчанию Java Demo (), вы обязательно должны указать его.
Другими словами, если ваш конструктор перегрузки в Java переопределен, и вы хотите использовать конструктор по умолчанию Java, его необходимо указать.
Шаг 5) Раскомментируйте строки №4-8. Сохраните, скомпилируйте и запустите код.
Конструктор цепочки
Рассмотрим сценарий, в котором базовый класс расширяется дочерним элементом. Каждый раз, когда создается объект дочернего класса, сначала вызывается конструктор родительского класса. Это называется цепочкой конструкторов.
Пример 3: понимание цепочки конструкторов
Шаг 1) Скопируйте следующий код в редактор.
class Demo{int value1;int value2;Demo(){value1 = 1;value2 = 2;System.out.println("Inside 1st Parent Constructor");}Demo(int a){value1 = a;System.out.println("Inside 2nd Parent Constructor");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);}public static void main(String args[]){DemoChild d1 = new DemoChild();d1.display();}}class DemoChild extends Demo{int value3;int value4;DemoChild(){//super(5);value3 = 3;value4 = 4;System.out.println("Inside the Constructor of Child");}public void display(){System.out.println("Value1 === "+value1);System.out.println("Value2 === "+value2);System.out.println("Value1 === "+value3);System.out.println("Value2 === "+value4);}}
Шаг 2) Запустите код. Благодаря цепочке конструкторов, когда создается объект дочернего класса DemoChild, сначала вызывается конструктор Demo () родительского класса, а затем создается конструктор DemoChild () дочернего класса. Ожидаемый результат =
Inside 1st Parent ConstructorInside the Constructor of ChildValue1 === 1Value2 === 2Value1 === 3Value2 === 4
Шаг 3) Вы можете заметить, что конструктор родительского класса Demo переопределен. Что, если вы хотите вызвать переопределенный конструктор Demo (int a) вместо конструктора по умолчанию Demo () при создании вашего дочернего объекта?
В таких случаях вы можете использовать ключевое слово «super» для вызова переопределенных конструкторов родительского класса.
Синтаксис:-
super();--or--super(parameter list);
Пример: если ваш конструктор похож на Demo (String Name, int a), вы должны указать super ("Java", 5). Если используется, ключевое слово super должно быть первой строкой кода в конструкторе дочернего класса.
Шаг 4) Раскомментируйте строку № 26 и запустите код. Наблюдайте за выходом.
Выход:
Inside 2nd Parent ConstructorInside the Constructor of ChildValue1 === 5Value2 === 0Value1 === 3Value2 === 4