Вступ до статичного конструктора на Java

Статичний конструктор - це фрагмент коду, який використовується для ініціалізації статичних даних, що означає, що певну задачу потрібно виконати лише один раз упродовж програми. Зазвичай викликається автоматично, перш ніж генеруються будь-які статичні члени або перший екземпляр. Статичний конструктор - це той, який явно оголошується за допомогою ключового слова "статичний". Конструктору заборонено стати статичним, абстрактним, кінцевим, рідним, синхронізованим або строгим файлом на Java.

Вони мають кілька унікальних особливостей:

  • Параметри або модифікатори доступу не приймаються статичним конструктором.
  • Конкретний клас може мати лише один статичний конструктор.
  • У статичних конструкторах не допускається спадкування або перевантаження.
  • Його не можна викликати безпосередньо, оскільки він завжди викликається автоматично.
  • Якщо значення ініціалізації статичних полів не надаються, вони ініціалізуються до їх значення за замовчуванням, як у таблиці значень за замовчуванням.

Синтаксис :

public class (
private ;
public static () ()
)

Тут ми намагаємося оголосити конструктор у класі, визначивши його як статичний. Коли такий код складається, ми отримуємо повідомлення про помилку, в якому йдеться про те, що неправомірний модифікатор використовується для конструктора типу, і дозволено лише публічне, захищене та приватне.

Робота статичного конструктора на Java

Конструктори не можуть стати статичними на Java через наступну причину:

У Java статичні методи та змінні застосовуються до класів. Але конструктор викликається, коли для створення екземпляра використовується новий оператор. Оскільки він не належить до класу властивостей, він не може бути статичним. Якщо у випадку, якщо конструктор вважається статичним, він не може отримати доступ до об'єкта свого підкласу.

Але якщо конструктору дозволено статично, то до нього можна отримати доступ у класі, а не за його підкласом. Він також не може бути успадкований, що означає, що вони належать до класу, про який вони заявлені. Дозвіл статичного конструктора порушує всю концепцію успадкування, отже, це незаконно.

Приклади статичного конструктора на Java

Ми можемо зрозуміти концепцію статичного конструктора на Java краще на наступних прикладах:

Приклад №1

Код:

public class Employee (
//Initialising variables for employee name and ID
public String emp_name;
public int emp_id;
//Declaration of the static constructor
public static Employee()(
System.out.println("Printing Constructor of the Employee class");
)
//Declaring method to print message
public void displayMsg()(
System.out.println("Employee Name is: "+this.emp_name );
System.out.println("Employee ID is: "+this.emp_id );
)
public static void main(String args()) (
//Creating a new object to call the display message constructor
new Employee().displayMsg();
)
)

Вихід:

Тут ми отримуємо помилку часу компіляції, яка говорить нам про те, що статична модифікатор не дозволений конструктору Employee () у класі Employee (), оскільки ми викликаємо те саме, створивши новий об’єкт нижче. Це можна вирішити, не оголошуючи його статичним. Ознайомтесь із наведеним нижче прикладом.

Приклад №2

Ми повинні створити 2 класи всередині одного пакету; ParentExample.java та ChildExample.java, що поширюється на батьківський клас.

Код:

ParentExample.java:

public class ParentExample (
ParentExample()(
super();
System.out.println("Printing Super constructor inside Parent class");
)
void displayMessage()(
System.out.println("Printing inside display Message class");
)
)

ChildExample.java:

public class ChildExample extends ParentExample (
ChildExample()(
super();
System.out.println("Printing super constructor inside child class");
)
@Override
void displayMessage()(
System.out.println("Printing display message inside Parent example");
)
public static void main(String() args)(
ChildExample childexample = new ChildExample();
childexample.displayMessage();
)
)

Тепер запустіть ChildExample.java.

Вихід:

Спостереження:

  • І для класу Parent і Child є конструктори за замовчуванням, без аргументів та надрукованого повідомлення, щоб зрозуміти потік виконання.
  • Статичний конструктор - це перший блок коду, який запускається в класі, оскільки вони виконуються негайно при запуску відповідного класу.
  • Підклас замінює метод відображення повідомлення () і друкує повідомлення.
  • Ми створили новий об'єкт класу ChildExample, який виконує перший конструктор надкласового класу, а потім другий підклас.
  • Нарешті, метод відображення новоствореного об'єкта викликається для відображення повідомлення.
  • У таких випадках, коли реалізовано успадкування, конструктори викликаються явно або неявно. Тому його слід робити нестатичним, щоб він був доступним.
  • Коли він робиться статичним, він стає асоційованим з певним класом, ніж його екземпляри, а отже, він не буде доступний під час створення об'єктів.

Приклад №3

У цьому прикладі ми поєднаємо як вищезгадані статичні, так і нестатичні конструктори та перевіримо його реалізацію.

Код:

class ParentClass(
private static String message= "Test message";
// Declaring a nested static class
public static class StaticNestedClass(
// In the nested class only static members belonging to parent class can be accessed
// in a static nested class
public void displayprint() (
// We get a compiler error if we try and make this message
// a non-static variable
System.out.println("Displaying from nested class: " + message);
)
)
// Declaring Inner class or also called non-static nested class
public class ChildClass(
// The static and non-static constructor both can be accessed in
// this Child class
public void displayprint()(
System.out.println("Printing from static non-nested class: "+ message);
)
)
)
class Main
(
public static void main(String args())(
// Instance of static nested class creation
ParentClass.StaticNestedClass printer = new ParentClass.StaticNestedClass();
//Calling the non-static constructor of static nested class
printer.displayprint();
// Creating Parent class instance first in order
//to create the child class instance
ParentClass outer = new ParentClass();
ParentClass.ChildClass inner = outer.new ChildClass();
// Here we call the non-static method of Child class
inner.displayprint();
// Creation of instance for child class in one line
//by combining above 2 lines
ParentClass.ChildClass innerObject = new ParentClass().new ChildClass();
// Now we call the child method
innerObject.displayprint();
)
)

Вихід:

Обмеження статичного конструктора на Java

Ось деякі обмеження статичного конструктора в java, наведені нижче:

  • Імена конструктора не можуть бути явними, і вони повинні бути обов'язково такими ж, як і його клас. Оскільки вони обмежені цими конвенціями, більш читабельних назв їм не можна давати.
  • Кожного разу, коли потрібно викликати конструктор, слід створити новий об'єкт. Це також впливає на продуктивність коду, тим самим робить його повільним.
  • Повернення типів конструкторів обмежується поверненням того ж типу, що і об'єкт.
  • Ми не можемо використовувати статичні конструктори в побудові підкласів, оскільки допускається реалізація лише конструкторів надкласових класів.
  • Статичний конструктор не дозволяє використовувати ключове слово "це" для доступу до екземпляра.
  • Необхідні зусилля для тестування більше, якщо задіяні статичні конструктори.

Висновок

Основна робота конструктора полягає в ініціалізації об'єкта, і як видно з усіх вищенаведених прикладів, конструктору не дозволяється статичним з основної причини того, що до нього не можуть бути доступні об'єкти підкласу та інші нестатичні члени. Альтернативою статичному конструктору є використання статичних блоків коду для ініціалізації статичних змінних класу.

Рекомендовані статті

Це посібник зі статичного конструктора на Java. Тут ми обговорюємо роботу, обмеження та приклади статичних конструкторів у java in java разом з їх реалізацією. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. HashMap на Java
  2. JavaFX FileChooser
  3. JavaFX TextField
  4. Кнопка JavaFX
  5. Приклади статичного методу JavaScript