Увод у статички конструктор на Јави

Статички конструктор је део кода који се користи за иницијализацију статичких података, што значи да одређени задатак треба извршити само једном у току програма. Обично се аутоматски позива пре него што се генеришу било који статички чланови или прва инстанца. Статички конструктор је онај који се изричито декларира помоћу кључне речи „статички“. Конструктору није дозвољено да на Јави буде статички, апстрактни, коначни, изворни, синхронизован или строг.

Они имају неколико јединствених карактеристика као што следи:

  • Параметри или модификатори приступа не узимају статички конструктор.
  • Одређена класа може имати само један статички конструктор.
  • Наслеђивање или преоптерећење није дозвољено у статичким конструкторима.
  • Не може се директно позвати јер се увек аутоматски позива.
  • Ако статичка поља нису иницијализиране, тада се они иницијализирају на њихову задану вриједност као у таблици заданих вриједности.

Синтакса :

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

Овдје покушавамо декларирати конструктор у класи дефинирајући га статичким. Кад се такав код састави, добијамо поруку о грешци у којој се наводи да се илегални модификатор користи за конструктор у типу и да су дозвољени само јавни, заштићени и приватни.

Рад статичког конструктора у Јави

Конструкторима није допуштено да буду статични у Јави из следећег разлога:

У Јави се статичне методе и променљиве односе на класе. Али конструктор се позива када се нови оператор користи за креирање инстанције. Будући да не припада имовинском разреду, није дозвољено да буде статично. Ако се у случају да се конструктор сматра статичким, њему не може приступити објект из његовог подразреда.

Али ако је конструктору дозвољено да буде статички, њему се може приступити унутар класе, али не и његов подразред. Такође се не може наследити, што значи да припадају класи за коју су декларисани. Допуштање статичког конструктора крши читав концепт насљеђивања, стога је незаконито.

Примери статичког конструктора у Јави

Концепт Статичког конструктора у Јави можемо боље разумети у следећим примерима:

Пример # 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();
)
)

Излаз:

Овде нам долази грешка у компилацији која нам говори да статичка модификатор није дозвољена за Емплоиее () конструктор унутар Емплоиее () класе, јер исти зовемо креирајући нови објект у наставку. Ово се може решити тако што се не декларише као статично. Погледајте доњи пример за исти.

Пример бр. 2

Морамо створити 2 класе унутар истог пакета; ПарентЕкампле.јава и ЦхилдЕкампле.јава која се протеже од родитељске класе.

Шифра:

ПарентЕкампле.јава:

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

ЦхилдЕкампле.јава:

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

Сада покрените ЦхилдЕкампле.јава.

Излаз:

Обсерватионс:

  • И родитељска и дечја класа имају задате конструкторе без аргумената и поруке штампане како би извршење било јасно.
  • Статички конструктор је први блок кода који се изводи у класи јер се они извршавају одмах када се изврши одговарајућа класа.
  • Подкласа надјачава методу приказа поруке () и исписује поруку.
  • Направили смо нови објект ЦхилдЕкампле класе који извршава први конструктор суперкласе, а затим други подразред.
  • Најзад се прикаже метода приказа новоствореног објекта за приказ поруке.
  • У таквим случајевима када се наслеђивање спроводи, конструктори се позивају или изричито или имплицитно. Због тога би требало да буде нестатично тако да му је доступно.
  • Када се направи статички, тада се повезује с одређеном класом од његових инстанци и стога неће бити доступан током инстанције објекта.

Пример бр. 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();
)
)

Излаз:

Ограничења статичког конструктора у Јави

Ево неких ограничења статичког конструктора у Јави дата доле:

  • Имена конструктора не могу бити експлицитна и морају обавезно бити иста као и име њихове класе. Будући да су ограничени на ове конвенције, не могу им се додијелити читљивија имена.
  • Сваки пут када се мора позвати конструктор, мора се створити нови објект. То такође утиче на перформансе кода што га чини спорим.
  • Повратни типови конструктора ограничени су да враћају исти тип као и објект.
  • Не можемо користити статичке конструкторе у конструкцији подразреда јер је дозвољена примена само конструктора суперкласа.
  • Статички конструктор не дозвољава употребу кључне речи „ово“ за приступ инстанци.
  • Потребни напори за тестирање су више када су у питању статички конструктори.

Закључак

Главни посао конструктора је за иницијализацију објекта и као што је видљиво из свих горе наведених примјера, конструктору није дозвољено да буде статички из главног разлога што њему не може приступити објект поткласа и други нестатички чланови. Алтернатива статичком конструктору је употреба статичких блокова кода за иницијализацију статичких променљивих класе.

Препоручени чланци

Ово је водич за статички конструктор на Јави. Овде смо расправљали о раду, ограничењима и примерима статичких конструктора у јави у јави, заједно са њиховом имплементацијом. Такође можете погледати следеће чланке да бисте сазнали више -

  1. ХасхМап у Јави
  2. ЈаваФКС ФилеЦхоосер
  3. ЈаваФКС ТектФиелд
  4. ЈаваФКС дугме
  5. Примери ЈаваСцрипт статичке методе

Категорија: