java constructor class
Овај водич ће размотрити Јава Цонструцтор, његове типове и концепте попут преоптерећења конструктора и ланца конструктора са примерима кода:
Из наших ранијих водича знамо да се инстанца класе назива објектом. Објекат класе се креира помоћу кључне речи „нев“. Посебна метода која се назива „конструктор“ позива се када креирамо објекат са новом кључном речи или када је објекат инстанциран.
Конструктор је дефинисан као блок кода за иницијализацију објекта класе. Идентичан је методи, али није метод. Међутим, на Јави се то може назвати „посебним методом“.
=> Овде погледајте како бисте овде видели А-З Јава Водича за обуку.
Шта ћете научити:
- Јава Цонструцтор
- Закључак
Јава Цонструцтор
Јава конструктор се користи за иницијализацију управо креираног објекта. Објекат мора да има неке податке пре него што се користи у програму. Отуда користимо конструктор да бисмо објекту могли доделити неке почетне податке.
Као једноставан пример, узмимо класу АБЦ за коју треба да креирамо објекат. Направимо објекат ‘миОбј’ за класу АБЦ помоћу нове кључне речи.
ABC myObj = new ABC ();
Горња изјава креира објекат миОбј. Када се овај објекат креира, позива се конструктор за класу АБЦ без аргумента (АБЦ () приказује да не постоје аргументи за конструктор). Како за наведени конструктор нису наведени аргументи, поља члана миОбј биће иницијализована на њихове подразумеване почетне вредности.
На пример,
- Нумерички типови података попут инт су постављени на 0.
- Вредност променљиве типа података Цхар је постављена на нулл (‘ 0’) карактер.
- Референце су постављене на нулу.
У овом упутству детаљно ћемо размотрити конструкторе заједно са разним конструкторима који се користе у Јави.
Како створити конструктор на Јави
Да бисмо креирали конструктор у Јави, морамо следити одређена правила наведена у наставку.
- Конструктор класе има исто име као и класа.
- Не може постојати конструктор који је коначан, апстрактан, синхронизован или статичан. То је зато што Финал делује као константа, апстракт не може бити инстанциран. Док се синхронизовано користи у случају више навоја, а статична кључна реч се користи на нивоу класе.
- Са конструкторима можемо користити модификаторе приступа.
- Конструктор не може имати повратни тип.
На пример,дефинишемо разред ученика на следећи начин:
class Student{ String name; int roll_no; }
Помоћу нове кључне речи можемо да креирамо објекте горе наведене класе. Док се објекат креира, можемо да иницијализујемо двочлане променљиве ове класе пружајући конструктор. Имајте на уму да чак и ако не пружимо конструктор и само извршимо доњу изјаву,
Студент студент = нови Студент ();
Ипак, Јава ће извршити задани конструктор који ће иницијализовати двочлане променљиве у подразумеване вредности система. Сада, ако желимо да почетна вредност Студент.наме буде „Кеитх“, а ролл_но 27, онда за то можемо створити следећи метод конструктора.
Student () { name = 'Keith'; roll_no = 27; }
Када креирамо објекат студентског разреда са доле наведеном изјавом
Student student = new Student ();
Тада ће почетне вредности чланских променљивих наме и ролл_но бити Кеитх, односно 27.
Сад кад је креиран конструктор, када ће бити позван?
Конструктор се позива сваки пут када се објекат креира са новом кључном речи као у горњем случају. Као што је већ поменуто, ако није наведен ниједан конструктор, Јава нуди подразумевани конструктор који се позива када се објекат креира помоћу нове кључне речи.
Пример конструктора
Следећи програм приказује пример конструктора у којем имамо једноставан конструктор без икаквих аргумената. Овај конструктор једноставно додељује почетне вредности својим чланским променљивим.
//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(); } }
Излаз:
Подразумевани конструктор у Јави
Подразумевани конструктор се такође назива Емпти Цонструцтор . Овај конструктор убацује Јава компајлер у код класе где не постоји конструктор који имплементира програмер. Подразумевани конструктор се убацује током компајлирања и он ће се појавити само у датотеци „.цласс“, а не у изворном коду.
Размотрите следећу класу Јава.
изворна датотека (.јава) датотека класе (.цласс)
На горњој слици, прва слика приказује изворни код у којем нисмо навели ниједан конструктор. Дакле, када компајлирамо овај код и генерише се датотека .цласс, можемо видети да је Јава компајлер убацио подразумевани конструктор као што је приказано на суседној слици (у плавој боји).
Белешка:
Понекад се подразумевани конструктор користи за описивање но-арг конструктора у Јави. Али ова два појма су различита у стварности. Но-арг конструктор је врста конструктора у Јави коју одређује програмер. Подразумевани конструктор је конструктор који је уметнуо Јава компајлер.
најбољи бесплатни иоутубе то мп3 довнлоадер
Стога, иако се већина програмера ова два појма користе наизменично, препоручљиво је не мешати ова два појма.
Када Јава убаци задани конструктор, ако програм има било какве променљиве, тада им се додељују подразумеване вредности.
Табела у наставку приказује подразумеване вредности сваког типа података.
Тип | Задана вриједност |
---|---|
цхар | у0000 |
Предмет | Референца нула |
боолеан | лажно |
бајт | 0 |
кратак | 0 |
инт | 0 |
дуго | 0Л |
пловак | 0.0ф |
двоструко | 0.0д |
Следећи програм даје пример подразумеваног конструктора у Јави.
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); } }
Излаз:
Типови конструктора у Јави
Постоје две врсте конструктора у Јави, као што је приказано доле.
# 1) Но-арг конструктор
Конструктор без икаквих аргумената назива се но-аргс или но-аргумент конструктор. Ако немамо конструктор без икаквих аргумената, онда Јава компајлер не креира подразумевани конструктор за класу.
Генерално, ако дефинишемо конструктор у нашој класи, тада Јава преводилац не убацује подразумевани конструктор.
Доље је дат пример Но-арг конструктора
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(); } }
Излаз:
У овом програму смо обезбедили но-аргс конструктор. Овде исписујемо неке поруке, укључујући променљиве члана. У излазу можемо видети да се приказују поруке из конструктора које указују на то да се конструктор но-аргс извршава.
# 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); } }
Излаз:
Овде смо пружили параметризовани конструктор који узима два аргумента, односно име и ид.
Унутар тела конструктора, аргументи се додељују као вредности чланским променљивим наме односно ид.
Затим у главној методи када креирамо нови објекат помоћу нове кључне речи, прослеђујемо две вредности имену класе након нове кључне речи. То указује на то да позивамо параметризирани конструктор. Када прикажемо променљиве члана, можемо видети да оне имају вредности које смо проследили приликом креирања објекта.
Преоптерећени конструктори у Јави
Сада се поставља питање може ли класа имати више конструктора или класа може имати само један конструктор?
Па, можемо имати више конструктора у класи. Класа може имати толико конструктора док је правилно преоптерећена.
Дакле, шта се тачно подразумева под Преоптерећењем конструктора?
Преоптерећење конструктора је механизам који омогућава класи да има што више конструктора, тако да сви ови конструктори имају различите листе параметара, зависно од врсте параметара или редоследа параметара.
Програм у наставку показује преоптерећење конструктора.
//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(); } }
Излаз:
У горњем програму имамо класу која садржи три конструктора. Први конструктор је но-арг конструктор, и тада имамо по једног са по једним и два аргумента. Како конструктор има јединствену листу параметара, можемо рећи да су конструктори преоптерећени.
Конструктор „тхис ()“ У Јави
У класи која садржи више конструктора, шта ако желимо да позовемо један конструктор из другог конструктора у овој класи?
У ту сврху користимо кључну реч „ово“ унутар конструктора из којег желимо позвати други конструктор.
Дакле, када класа има више конструктора, конструктор но-арг и параметризовани конструктор, користимо кључну реч ‘тхис’ за позивање параметризованог конструктора из конструктора но-аргс. Ово се такође назива „Експлицитно позивање конструктора“.
Зашто нам је потребна ова кључна реч?
Потребан нам је јер експлицитно позивање конструктора није могуће директно коришћењем само имена конструктора.
Биљешке:
- Кључна реч „ово“ требало би да буде прва изјава у позивајућем конструктору.
- Ако конструктор има кључну реч „тхис“, онда не може имати „супер“. То значи да конструктор може имати супер или ово.
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(); } }
Излаз:
У горњем програму имамо „ТестЦласс“ са два конструктора. Ово називамо („СофтвареТестингХелп“) из конструктора но-аргс. Ово је експлицитно позивање параметризираног конструктора.
Копирај конструктор у Јави
Знамо за конструктор копирања у Ц ++. Конструктор копије је конструктор који као референцу има референцу на објекат и нови објекат се креира помоћу података референтног објекта.
Ц ++ нуди подразумевани конструктор копија ако није предвиђен у програму.
Јава такође пружа подршку за конструктор копија, али не нуди подразумевани конструктор копија.
Следећи Јава програм демонстрира конструктор копирања на класичном примеру сложених бројева који имају стварне и замишљене компоненте.
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; } }
Излаз:
Горњи програм има класу „Сложени“ која има параметризовани конструктор и конструктор за копирање. Прво у главној методи, креирамо објекат ц1 помоћу параметризованог конструктора. Затим користећи доњу изјаву,
како отворити .апк датотеке
Complex c2 = new Complex (c1);
Горња изјава позива конструктор копирања док се референца ц1 преноси конструктору приликом креирања новог објекта ц2.
Ланац конструктора у Јави
Ланцирање конструктора је процес једног конструктора који позива други конструктор исте класе.
Чак и када смо наследили основну класу, конструктор основне класе се прво позива када се креира објект класе дете. Ово је такође пример уланчавања конструктора.
У Јави се уланчавање конструктора може постићи помоћу два приступа:
- У оквиру исте класе : Када позивамо један конструктор из другог конструктора исте класе, тада можемо користити користећи ову кључну реч.
- Из основне класе: Конструктор основне класе може позвати конструктор изведене класе помоћу кључне речи супер.
Зашто нам је потребан ланац конструктора?
Када желимо да изведемо више задатака у нашем конструктору, онда, уместо да изводимо сваки задатак у једном конструктору, рашчлањујемо задатке на више конструктора, а затим позивамо конструкторе један од другог што резултира уланчавањем конструктора.
Доље су дата нека правила која треба да се придржавамо током извођења ланца конструктора.
- Ланцивање конструктора врши се у било којем редоследу и даће исте резултате.
- Кључна реч израз „тхис“ треба да буде први израз у конструктору.
- Требали бисмо имати бар један конструктор без ове кључне речи.
Када у свом програму имамо наследство, такође можемо да изведемо уланчавање конструктора. У овом случају, подкласа ће позвати конструктор основне класе. Радећи ову поткласу, стварање објеката започиње иницијализацијом чланова суперкласе.
Сада ћемо применити ланац конструктора у Јави користећи горње приступе.
# 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); } }
Излаз:
Као што је већ поменуто, постизање ланца конструктора унутар исте класе помоћу кључне речи ‘тхис’. У горњем програму имамо три конструктора и позивамо један конструктор из другог помоћу кључне речи ‘тхис’.
Из основне класе
Када класа наследи другу класу, тада се прво позива конструктор родитељске класе када креирамо објекат изведене класе која је уланчавање конструктора.
Ако желимо експлицитно да позовемо конструктор основне класе у изведеној класи, онда бисмо у ту сврху требали користити кључну реч „супер“. Коришћењем кључне речи „супер“ можемо назвати конструкторе суперкласе у хијерархији наслеђивања док не дођемо до највише класе.
Програм у наставку приказује употребу кључне речи „супер“ за уланчавање конструктора.
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'); } }
Излаз:
У горњем програму позивамо параметарски конструктор изведене класе са вредношћу „Јава“. Овај конструктор заузврат има позив конструктора основне класе користећи „супер (име);“ који извршава параметризовани конструктор основне класе.
Често постављана питања
П # 1) Како креирати конструктор на Јави?
Одговор: Конструктор креирамо као посебну методу која има исто име као и назив класе. Конструктор не може имати и повратни тип. Може имати модификаторе приступа, али не може бити коначан, статичан, апстрактан или синхронизован.
Ако је АБЦ класа, онда њен конструктор можемо дефинисати као
ABC(){} //no args constructor OR ABC(param1, param 2, …, param n) {} //parameterized constructor
П # 2) Која је корист од конструктора у Јави?
Одговор: Користећи конструктор, можемо иницијализовати чланове класе као прву ствар у тренутку када се објекат креира. Конструктор елиминише потребу за имплицитним позивањем нормалних метода.
У конструктору можемо изводити разне задатке који се односе на иницијализацију, покретање задатака итд. Док се конструктори позивају током фазе креирања објекта.
П # 3) Зашто се користе конструктори?
Одговор: Конструктори се углавном користе за иницијализацију чланова класе и позивају се када се објект класе креира.
П # 4) Може ли конструктор бити приватни?
Одговор: Да, можемо имати приватни конструктор. Када је конструктор приватан, тада се може спречити инстанцирање класе.
П # 5) Може ли конструктор бити коначан?
Одговор: Не, не можемо имати коначни конструктор.
Закључак
У овом упутству започели смо расправу о конструкторима у Јави. Научили смо основе конструктора, његово стварање и правила која треба следити. Такође смо разговарали о конструкторима копирања у Јави.
Примери су дати укратко о подразумеваном конструктору и врстама конструктора и концептима као што су преоптерећење конструктора и уланчавање конструктора. Као део ових тема, видели смо и употребу кључне речи ‘тхис’ у конструкторима.
=> Прочитајте серију Еаси Јава Траининг.
Препоручено читање
- Јава Цласс Вс Објецт - Како се користи класа и објекат у Јави
- Основе Јава-а: Јава синтакса, Јава Цласс и основни Јава концепти
- Јава Интегер и Јава БигИнтегер класа са примерима
- Водич за класу Јава Сцаннер са примерима
- Јава Арраи Цласс Туториал - јава.утил.Арраис Цласс са примерима
- Шта је Јава Вецтор | Водич за Јава векторску класу са примерима
- Јава интерфејс и лекција са апстрактним часовима са примерима
- Класа робота у програму Селениум ВебДривер са Јавом