Статичен конструктор в Java - Работа и приложение на статичен конструктор

Съдържание:

Anonim

Въведение в статичния конструктор на Java

Статичният конструктор е част от кода, използван за инициализиране на статични данни, което означава, че определена задача трябва да се изпълни само веднъж в цялата програма. Обикновено се извиква автоматично, преди да се генерират всички статични членове, посочени или първа инстанция. Статичен конструктор е този, който е изрично деклариран с помощта на „статичната“ ключова дума. Конструкторът не е позволен да бъде статичен, абстрактен, финален, нативен, синхронизиран или строг Fp в Java.

Те имат няколко уникални функции, както следва:

  • Параметрите или модификаторите на достъп не се вземат от статичен конструктор.
  • Конкретният клас може да притежава само един статичен конструктор.
  • Наследяването или претоварването не е разрешено в статични конструктори.
  • Не може да бъде извикан директно, тъй като винаги се извиква автоматично.
  • Ако стойностите за инициализация на статичните полета не са предоставени, то тя се инициализира до стойността им по подразбиране, както в таблицата със стойности по подразбиране.

Синтаксис :

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

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

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

Конструкторите не могат да бъдат статични в Java поради следната причина:

В Java статичните методи и променливи се прилагат към класовете. Но конструктор се извиква, когато се използва нов оператор за създаване на екземпляр. Тъй като не принадлежи към класа на свойствата, не е позволено да бъде статичен. Ако в случай, че конструктор се счита за статичен, той не може да бъде достъпен от обект от неговия подклас.

Но ако на конструктора е позволено да е статичен, тогава той може да бъде достъпен в класа, но не и от неговия подклас. Той също не може да бъде наследен, което означава, че принадлежат към класа, за който са декларирани. Разрешаването на статичен конструктор нарушава цялата концепция за наследство, следователно е незаконно.

Примери за статичен конструктор в Java

Можем да разберем по-добре концепцията на Static Constructor в 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.

изход:

Наблюдения:

  • И класът родител и дете имат конструктори по подразбиране без аргументи и отпечатано съобщение, за да се изчисти процесът на изпълнение.
  • Статичният конструктор е първият блок код, който се изпълнява в класа, тъй като те се изпълняват веднага, когато съответното изпълнение на класата започне.
  • Подкласът отменя метода на дисплейното съобщение () и отпечатва съобщението.
  • Създадохме нов обект от класа 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