java constructor class
Цей підручник обговорить Java Constructor, його типи та концепції, такі як перевантаження конструктора та ланцюжок конструкторів, з прикладами коду:
З попередніх навчальних посібників ми знаємо, що екземпляр класу називається об’єктом. Об'єкт класу створюється за допомогою ключового слова “new”. Спеціальний метод, що називається 'конструктор', викликається, коли ми створюємо об'єкт з новим ключовим словом або коли об'єкт створюється за допомогою екземпляра.
Конструктор визначається як блок коду для ініціалізації об'єкта класу. Це ідентично методу, але це не метод. Однак це можна назвати 'особливим методом' на Java.
=> Перегляньте тут, щоб побачити A-Z навчальних посібників з навчання Java тут.
Що ви дізнаєтесь:
- Конструктор Java
- Висновок
Конструктор Java
Конструктор Java використовується для ініціалізації щойно створеного об'єкта. Об’єкт повинен мати деякі дані, перш ніж він буде використаний у програмі. Отже, ми використовуємо конструктор, щоб ми могли присвоїти об’єкту деякі початкові дані.
Як простий приклад розглянемо клас ABC, для якого нам потрібно створити об’єкт. Давайте створимо об’єкт ‘myObj’ для класу ABC, використовуючи нове ключове слово.
ABC myObj = new ABC ();
Наведений вище оператор створює об'єкт myObj. Коли створюється цей об'єкт, викликається конструктор для класу ABC без аргументу (ABC () зображує відсутність аргументів для конструктора). Оскільки для вищезазначеного конструктора немає аргументів, поля-члени myObj будуть ініціалізовані до початкових значень за замовчуванням.
Наприклад,
- Для числових типів даних, таких як int, встановлено значення 0.
- Значення змінної типу даних Char встановлюється як нульовий (‘ 0’) символ.
- Посилання встановлюються як нульові.
У цьому підручнику ми детально обговоримо конструктори, а також різні конструктори, що використовуються в Java.
Як створити конструктор на Java
Щоб створити конструктор на Java, нам потрібно дотримуватися певних правил, наведених нижче.
- Конструктор класу має те саме ім'я, що і ім'я класу.
- Не може бути конструктора, який є остаточним, абстрактним, синхронізованим або статичним. Це пояснюється тим, що Фінал діє як константа, абстрактне не може бути створено. Хоча синхронізація використовується у випадку багатопоточності, а ключове слово static використовується на рівні класу.
- Ми можемо використовувати модифікатори доступу з конструкторами.
- Конструктор не може мати тип повернення.
Наприклад,давайте визначимо клас Student наступним чином:
class Student{ String name; int roll_no; }
Ми можемо створювати об’єкти вищевказаного класу, використовуючи нове ключове слово. Поки об’єкт створюється, ми можемо ініціалізувати двочленні змінні цього класу, надавши конструктор. Зауважте, що навіть якщо ми не надаємо конструктор і просто виконуємо наведену нижче заяву,
Студент = новий Студент ();
І все-таки Java виконає конструктор за замовчуванням, який ініціалізує двочленні змінні за замовчуванням. Тепер, якщо ми хочемо, щоб початкове значення Student.name було “Кіт”, а roll_no - 27, тоді для цього ми можемо створити такий метод конструктора.
Student () { name = 'Keith'; roll_no = 27; }
Коли ми створюємо об’єкт студентського класу з наведеним нижче твердженням
Student student = new Student ();
Тоді початковими значеннями змінних-членів name та roll_no будуть Кіт та 27 відповідно.
Тепер, коли конструктор створений, коли він буде викликаний?
Конструктор викликається кожного разу, коли об’єкт створюється з новим ключовим словом, як у наведеному вище випадку. Як уже зазначалося, якщо конструктор не надається, Java надає конструктор за замовчуванням, який викликається при створенні об'єкта за допомогою нового ключового слова.
Приклад конструктора
Наступна програма показує приклад конструктора, в якому ми маємо простий конструктор без будь-яких аргументів. Цей конструктор просто призначає початкові значення своїм змінним-членам.
//class definition class classDemo{ int num1; int num2; //constructor classDemo(){ num1 = 100; num2 = 250; System.out.println('Inside ClassDemo::Constructor'); } public void display(){ System.out.println('num1 = '+ num1); System.out.println('num2 = '+ num2); } } class Main{ public static void main(String args()){ classDemo cd1 = new classDemo(); //create object of ClassDemo cd1.display(); } }
Вихід:
Конструктор за замовчуванням у Java
Конструктор за замовчуванням також називається Порожній конструктор . Цей конструктор вставляється компілятором Java у код класу, де немає конструктора, реалізованого програмістом. Конструктор за замовчуванням вставляється під час компіляції, отже, він відображатиметься лише у файлі «.class», а не у вихідному коді.
Розглянемо наступний клас Java.
вихідний файл (.java) файл класу (.class)
На наведеному малюнку на першому малюнку показано вихідний код, в якому ми не вказали жодного конструктора. Отже, коли ми компілюємо цей код і генерується файл .class, ми бачимо, що компілятор Java вставив конструктор за замовчуванням, як показано на сусідній фігурі (синім кольором).
Примітка:
Іноді для опису конструктора no-arg в Java використовується конструктор за замовчуванням. Але ці два терміни насправді різні. Конструктор No-Arg - це тип конструктора в Java, який визначається програмістом. Конструктор за замовчуванням - це конструктор, який вставляється компілятором Java.
що з наведеного є однією з найпопулярніших платформ тестування?
Отже, хоча ці два терміни використовуються як взаємозамінні більшістю програмістів, бажано не плутати ці два терміни.
Коли Java вставляє конструктор за замовчуванням, якщо програма має будь-які змінні, то їм присвоюються значення за замовчуванням.
У таблиці нижче наведено значення за замовчуванням для кожного типу даних.
Тип | Значення за замовчуванням |
---|---|
char | u0000 |
Об'єкт | Посилання нульове |
логічний | помилковий |
байт | 0 |
короткий | 0 |
інт | 0 |
довгота | 0л |
плавати | 0,0f |
подвійний | 0,0д |
Наступна програма подає приклад конструктора за замовчуванням у Java.
class Main { int num; boolean flag; public static void main(String() args) { // A default constructor is called Main obj = new Main(); System.out.println('num:default value = ' + obj.num); System.out.println('flag:default value = ' + obj.flag); } }
Вихід:
Типи конструкторів в Java
Як показано нижче, у Java є два типи конструкторів.
# 1) Конструктор без аргументів
Конструктор без будь-яких аргументів називається конструктором no-args або no-argument. Якщо у нас немає конструктора без будь-яких аргументів, то компілятор Java не створює конструктор за замовчуванням для класу.
Загалом, якщо ми визначаємо конструктор у нашому класі, тоді конструктор за замовчуванням не вставляється компілятором Java.
Нижче наведено приклад конструктора No-arg
import java.io.*; class DemoClass { int num; String name; // no-args Constructor called when object is created DemoClass() { System.out.println('DemoClass::Constructor called'); System.out.println('Initial member variable values:'); System.out.println('num = ' + num + ' name = ' + name); } } class Main{ public static void main (String() args) { // this will invoke no-args Constructor DemoClass dc1 = new DemoClass(); } }
Вихід:
У цій програмі ми запропонували конструктор no-args. Тут ми друкуємо деякі повідомлення, включаючи змінні-члени. На виході ми бачимо, що відображаються повідомлення від конструктора, що вказують на те, що виконано конструктор no-args.
# 2) Параметризований конструктор
Параметризований конструктор має один або кілька параметрів. Ми можемо використовувати параметризований конструктор на випадок, якщо нам потрібно передати деякі початкові значення змінній-члену класу.
import java.io.*; class DemoClass { // data members of the class. String name; int id; // parameterized constructor called when object is created DemoClass(String name, int id) { this.name = name; this.id = id; } } class Main { public static void main (String() args) { // this will invoke the parameterized constructor. DemoClass dc1 = new DemoClass('Java', 1); System.out.println('Tutorial Name :' + dc1.name + ', Id :' + dc1.id); } }
Вихід:
Тут ми запропонували параметризований конструктор, який приймає два аргументи, тобто name та id.
Усередині тіла конструктора аргументи присвоюються як значення іменам змінних-членів відповідно.
Тоді в основному методі, коли ми створюємо новий об’єкт за допомогою нового ключового слова, ми передаємо два значення до імені класу після нового ключового слова. Це вказує на те, що ми викликаємо параметризований конструктор. Коли ми відображаємо змінні-члени, ми бачимо, що вони мають значення, передані нами під час створення об'єкта.
Перевантажені конструктори в Java
Тепер виникає питання, чи може клас мати більше одного конструктора, чи це клас може мати лише один конструктор?
Ну, ми можемо мати кілька конструкторів у класі. У класі може бути стільки конструкторів, скільки вони належним чином перевантажені.
То що саме мається на увазі під перевантаженням конструкторів?
Перевантаження конструктора - це механізм, який дозволяє класу мати стільки конструкторів, щоб усі ці конструктори мали різні списки параметрів, залежно від типів параметрів або порядку параметрів.
Наведена нижче програма демонструє перевантаження конструктора.
//class with multiple constructors class DemoClass{ int val1; int val2; //no args Constructor DemoClass(){ val1 = 10; val2 = 20; System.out.println('DemoClass:: No argument Constructor'); } //Overloaded Constructor DemoClass(int num1){ val1 = num1; val2 = num1; System.out.println('DemoClass:: Overloaded Constructor with one argument'); } //Overloaded DemoClass(int num1,int num2){ val1 = num1; val2 = num2; System.out.println('DemoClass:: Overloaded Constructor with two arguments'); } public void display(){ System.out.println('val1 === '+val1 + ' ; val2 === '+val2 ); } } class Main{ public static void main(String args()){ DemoClass d1 = new DemoClass(); //object with no-args Constructor d1.display(); DemoClass d2 = new DemoClass(10); //object with 1 arg Constructor d2.display(); DemoClass d3 = new DemoClass(20,40); //object with 2 arg Constructor d3.display(); } }
Вихід:
У наведеній вище програмі ми маємо клас, що містить три конструктори. Перший конструктор - це конструктор no-arg, і тоді ми маємо по одному з одним аргументом та двома аргументами відповідно. Оскільки конструктор має унікальний список параметрів, можна сказати, що конструктори перевантажені.
Конструктор ‘this ()’ на Java
Що робити в класі, що містить кілька конструкторів, якщо ми хочемо викликати один конструктор з іншого конструктора цього класу?
Для цього ми використовуємо ключове слово “this” всередині конструктора, з якого ми хочемо викликати інший конструктор.
Отже, коли клас має кілька конструкторів, конструктор no-arg та параметризований конструктор, ми використовуємо ключове слово ‘this’ для виклику параметризованого конструктора з конструктора no-args. Це також називається “Явне виклик конструктора”.
Навіщо нам це ключове слово?
Це нам потрібно, оскільки явне виклик конструкторів неможливе безпосередньо за допомогою лише імені конструктора.
Примітки:
- Ключове слово ‘this’ має бути першим твердженням у конструкторі, що викликає.
- Якщо конструктор має ключове слово “this”, тоді він не може мати “super”. Це означає, що конструктор може мати або супер, або це.
class TestClass { TestClass() { //calling Parameterized Constructor this('SoftwareTestingHelp'); System.out.println('TestClass::No-args Constructor'); } TestClass(String str) { System.out.println('TestClass:: Parameterized Constructor(String):' + str); } } class Main{ public static void main(String() args) { TestClass obj = new TestClass(); } }
Вихід:
У наведеній вище програмі ми маємо «TestClass» з двома конструкторами. Ми називаємо це (“SoftwareTestingHelp”) з конструктора no-args. Це явне виклик параметризованого конструктора.
Конструктор копіювання в Java
Нам відомий конструктор копіювання в C ++. Конструктор копіювання - це конструктор, який має посилання на об'єкт як аргумент, і новий об'єкт створюється з використанням даних об'єкта посилання.
С ++ надає конструктор копій за замовчуванням, якщо такий не передбачений у програмі.
Структура даних графіка c ++
Java також надає підтримку конструктора копій, але не надає конструктора копій за замовчуванням.
Наступна програма Java демонструє конструктор копіювання на класичному прикладі комплексних чисел, які мають реальні та уявні компоненти.
class Complex { private double real, imaginary; // parametrized constructor public Complex(double real, double imaginary) { System.out.println('Complex:: parametrized constructor'); this.real = real; this.imaginary = imaginary; } // copy constructor Complex(Complex c) { System.out.println('Complex::Copy constructor called'); real = c.real; imaginary = c.imaginary; } // Overriding the toString of Object class @Override public String toString() { return '(' + real + ' + ' + imaginary + 'i)'; } } public class Main { public static void main(String() args) { Complex c1 = new Complex(1, 5); //calls parametrized constructor System.out.println('C1 = ' + c1); // copy constructor called Complex c2 = new Complex(c1); System.out.println('C2 = ' + c2); // this is a simple assignment operator Complex c3 = c2; } }
Вихід:
Вища програма має клас «Комплекс», що має параметризований конструктор та конструктор копіювання. Спочатку в основному методі ми створюємо об’єкт c1, використовуючи параметризований конструктор. Потім, використовуючи наведене нижче твердження,
Complex c2 = new Complex (c1);
Вищезазначений виклик викликає конструктор копіювання, оскільки посилання c1 передається конструктору під час створення нового об'єкта c2.
Налаштування конструктора в Java
Мережа конструкторів - це процес, коли один конструктор викликає інший конструктор того самого класу.
Навіть коли ми успадкували від базового класу, спочатку викликається конструктор базового класу, коли створюється об'єкт дочірнього класу. Це також приклад ланцюжка конструкторів.
На Java ланцюжок конструктора можна досягти за допомогою двох підходів:
- В межах одного класу : Коли ми викликаємо один конструктор з іншого конструктора того ж класу, тоді ми можемо використовувати ключове слово this ().
- З базового класу: Конструктор базового класу може бути викликаний конструктором похідного класу за допомогою ключового слова super.
Навіщо нам потрібен ланцюжок конструкторів?
Коли ми хочемо виконати декілька завдань у нашому конструкторі, то замість того, щоб виконувати кожне завдання в одному конструкторі, ми розбиваємо завдання на кілька конструкторів, а потім викликаємо конструктори один від одного, що призводить до ланцюжка конструкторів.
Нижче наведено деякі правила, яких ми повинні дотримуватися, виконуючи ланцюжки конструкторів.
- Структурування конструктора виконується в будь-якому порядку і дасть однакові результати.
- Вираз 'this' має бути першим виразом у конструкторі.
- У нас повинен бути принаймні один конструктор без цього ключового слова.
Коли в нашій програмі є спадщина, ми також можемо виконати ланцюжок конструкторів. У цьому випадку підклас буде викликати конструктор базового класу. Виконуючи цей підклас, створення об’єктів починається з ініціалізації членів суперкласу.
Тепер ми реалізуємо ланцюжок конструкторів на Java, використовуючи вищезазначені підходи.
# 1) ланцюжок конструкторів в одному класі
class DemoClass { // No args constructor DemoClass() { System.out.println('DemoClass::No args constructor'); } // parameterized constructor DemoClass(int val1) { // calls default constructor this(); System.out.println('DemoClass::Constructor with 1 argument: ' + val1); } // parameterized constructor DemoClass(int val1, int val2) { // invokes parameterized constructor with 1 argument this(5); System.out.print('DemoClass::constructor with 2 arguments:'); System.out.println('Product of 2 arguments = ' + val1 * val2); } } class Main{ public static void main(String args()) { // call parameterized constructor with 2 arguments new DemoClass(10, 15); } }
Вихід:
Як уже зазначалося, ми досягаємо ланцюжка конструкторів у тому самому класі, використовуючи ключове слово ‘this’. У наведеній вище програмі у нас є три конструктори, і ми викликаємо один конструктор з іншого за допомогою ключового слова ‘this’.
З базового класу
Коли клас успадковує інший клас, спочатку викликається конструктор батьківського класу, коли ми створюємо об'єкт похідного класу, який є ланцюжком конструктора.
Якщо ми хочемо явно викликати конструктор базового класу в похідному класі, тоді для цього слід використовувати ключове слово “super”. Використовуючи ключове слово «super», ми можемо викликати конструктори суперкласу в ієрархії успадкування, поки не дійдемо до найвищого класу.
Наведена нижче програма демонструє використання ключового слова 'супер' для ланцюжка конструкторів.
class BaseClass { String name; // no args constructor BaseClass() { this(''); System.out.println('BaseClass::No-argument constructor'); } // Parameterized constructor BaseClass(String name) { this.name = name; System.out.println('BaseClass::Parameterized constructor'); } } class DerivedClass extends BaseClass { // No-argument constructor DerivedClass() { System.out.println('DerivedClass::No-argument constructor'); } // parameterized constructor DerivedClass(String name) { super(name); // invokes Parameterized constructor of BaseClass System.out.println('DerivedClass::Parameterized constructor'); } } class Main { public static void main(String args()) { // invokes DerivedClass parameterized constructor DerivedClass obj = new DerivedClass('Java'); } }
Вихід:
У наведеній вище програмі ми викликаємо параметризований конструктор похідного класу зі значенням “Java”. Цей конструктор, у свою чергу, має виклик конструктора базового класу з використанням “super (name);” який виконує параметризований конструктор базового класу.
Часті запитання
Q # 1) Як створити конструктор на Java?
Відповідь: Ми створюємо конструктор як спеціальний метод, який має те саме ім'я, що і ім'я класу. Конструктор також не може мати тип повернення. Він може мати модифікатори доступу, але він не може бути остаточним, статичним, абстрактним або синхронізованим.
Якщо ABC є класом, то ми можемо визначити його конструктор як
ABC(){} //no args constructor OR ABC(param1, param 2, …, param n) {} //parameterized constructor
Q # 2) Яка перевага конструктора в Java?
Відповідь: Використовуючи конструктор, ми можемо ініціалізувати членів класу як перше, що створюється в даний момент. Конструктор усуває необхідність неявно викликати звичайні методи.
Ми можемо виконувати різні завдання, пов’язані з ініціалізацією, запуском завдань тощо у конструкторі, оскільки конструктори викликаються на етапі створення об’єкта.
Q # 3) Чому використовуються конструктори?
Відповідь: Конструктори в основному використовуються для ініціалізації членів класу і викликаються, коли створюється об'єкт класу.
Q # 4) Чи може конструктор бути приватним?
Відповідь: Так, ми можемо мати приватний конструктор. Коли конструктор є приватним, тоді класу може бути заборонено створювати екземпляри.
Q # 5) Чи може конструктор бути остаточним?
Відповідь: Ні, ми не можемо мати остаточний конструктор.
Висновок
У цьому підручнику ми розпочали нашу дискусію щодо конструкторів на Java. Ми вивчили основи конструктора, його створення та правила, яких слід дотримуватися. Ми також обговорили конструктори копіювання на Java.
Конструктор за замовчуванням, типи конструкторів та такі поняття, як перевантаження конструктора та ланцюжок конструкторів, були коротко описані з прикладами. Як частина цих тем, ми також бачили використання ключового слова ‘this’ у конструкторах.
=> Прочитайте серію Easy Java Training.
Рекомендована література
- Java Class Vs Object - Як використовувати клас і об'єкт в Java
- Основи Java: Синтаксис Java, клас Java та основні концепції Java
- Java Integer та клас Java BigInteger з прикладами
- Підручник з класу сканера Java із прикладами
- Підручник з класу масивів Java - java.util.Arrays Class з прикладами
- Що таке Java Java | Підручник з класу Java Vector з прикладами
- Інтерфейс Java та підручник з абстрактних класів із прикладами
- Робот-клас в Selenium WebDriver з Java