JavaRush /Java Blog /Random-TK /Synp gurluşykçylary. Java JDK 1.5
articles
Dereje

Synp gurluşykçylary. Java JDK 1.5

Toparda çap edildi
Synp gurluşykçylary.  Java JDK 1.5 - 1

Gurluşykçylar barada umumy maglumat

Конструкторusulyna meňzeş gurluş bolup, onuň maksady synpyň mysalyny döretmekdir. Dizaýneriň aýratynlyklary:
  • Gurluşygyň ady synpyň adyna laýyk gelmelidir (konwensiýa görä, birinji harp baş harp bilen ýazylýar, adatça at);
  • Islendik synpda konstruktor bar. Hatda birini ýazmasaňyzam, Java düzüjisi boş boljak we superklass konstruktoryny çagyrmakdan başga hiç zat etmeýän deslapky konstruktor döreder.
  • Konstruktor bir usula meňzeýär, ýöne bu usul däl, hatda synpyň agzasy hem hasap edilmeýär. Şonuň üçin ony kiçi klasda miras alyp ýa-da ýok edip bolmaz;
  • Gurluşykçylar miras galanok;
  • Bir synpda birnäçe konstruktor bolup biler. Bu ýagdaýda konstruktorlara aşa ýük diýilýär;
  • Bir synp konstruktory kesgitlemeýän bolsa, düzüji awtomatiki usulda kody parametrsiz konstruktor goşýar;
  • Konstruktoryň yzyna gaýtaryş görnüşi ýok, hatda görnüşi hem bolup bilmeýär void; bir görnüş yzyna gaýtarylsa void, indi konstruktor däl-de, synpyň adyna gabat gelýändigine garamazdan usuldyr.
  • Konstruktorda operatora rugsat berilýär return, ýöne hiç hili gymmaty bolmazdan diňe boş;
  • Konstruktor giriş üýtgedijilerini ulanmaga mümkinçilik berýär; üýtgedijilerden birini belläp bilersiňiz : public, ýa protected- privateda üýtgediji bolmazdan.
  • Konstruktoryň üýtgedijileri bolup bilmez ,,, abstractýa - da ;finalnativestaticsynchronized
  • Açar söz, thisşol bir synpdaky başga bir konstruktory aňladýar. Ulanylsa, oňa çagyryş konstruktoryň birinji setiri bolmaly;
  • Açar söz superene synpyň konstruktoryny çagyrýar. Ulanylsa, oňa salgylanma konstruktoryň birinji setiri bolmaly;
  • Eger konstruktor ata-babalar synpynyň konstruktoryna jaň etmese super(argumentsiz ýa-da argumentsiz), düzüji awtomatiki usulda atalar synpynyň konstruktoryny argumentsiz çagyrmak üçin kod goşýar;

Bellenen konstruktor

Islendik synpda konstruktor bar. Birini ýazmasaňyzam, Java düzüjisi deslapky konstruktor döreder. Bu konstruktor boş we superklass konstruktor diýmekden başga zat etmeýär. Bular. ýazsaňyz:
public class Example {}
onda bu ýazmaga deňdir:
public class Example
{
     Example()
     {
          super;
     }
}
Bu ýagdaýda ata-babalar synpy aç-açan görkezilmeýär we tertip boýunça ähli Java synplary synpy miras alýar, Objectşonuň üçin synp konstruktory diýilýär Object. Bir synp parametrleşdirilen konstruktory kesgitlän bolsa, ýöne artykmaç ýüklenen parametrsiz konstruktor ýok bolsa, parametrsiz konstruktory çagyrmak ýalňyşlykdyr. Şeýle-de bolsa, Java-da 1.5-nji wersiýadan bäri üýtgeýän uzynlykly argumentli konstruktorlary ulanmak bolýar. Üýtgeýän uzynlyk argumenti bolan konstruktor bar bolsa, deslapky konstruktory çagyrmak ýalňyşlyk bolmaz. Üýtgeýän uzynlyk argumentiniň boş bolup biljekdigi sebäpli bolmaz. Mysal üçin, aşakdaky mysal düzülmez, ýöne üýtgeýän uzynlyk argumenti bilen konstruktory açmasaňyz, düzer we üstünlikli işlär we kod setiriniň işlemegine sebäp bolar DefaultDemo dd = new DefaultDemo(); konstruktor diýler DefaultDemo(int ... v). Elbetde, bu ýagdaýda JSDK 1.5 ulanmaly. FaýlDefaultDemo.java
class DefaultDemo
{
 DefaultDemo(String s)
 {
  System.out.print("DefaultDemo(String)");
 }
 /*
 DefaultDemo(int ... v)
 {
  System.out.println("DefaultDemo(int ...)");
 }
 */

 public static void main(String args[])
 {
  DefaultDemo dd = new DefaultDemo();
 }
}
Konstruktor bilen programma çykyşynyň netijesi:
DefaultDemo(int ...)
Şeýle-de bolsa, synp hiç bir konstruktory asla kesgitlemeýän ýagdaýynda, deslapky konstruktoryň çalyşmagy awtomatiki ýagdaýda ýüze çykýandygy sebäpli, deslapky konstruktory çagyrmak (parametrlersiz) zerur bolar.

Obýekt döretmek we konstruktorlar

Obýekt döredilende aşakdaky hereketler yzygiderli ýerine ýetirilýär:
  • Obýekt synpy programmada eýýäm ulanylýan synplaryň arasynda gözlenýär. Ol ýerde ýok bolsa, programma üçin bar bolan ähli kataloglarda we kitaphanalarda gözlenýär. Bir katalogda ýa-da kitaphanada bir synp tapylansoň, synpyň statiki meýdanlary döredilýär we başlaýar. Bular. Her synp üçin statiki meýdanlar diňe bir gezek başlaýar.
  • Oryat obýekt üçin bölünip berilýär.
  • Synp meýdanlary işe girizilýär.
  • Synp konstruktory ýerine ýetirýär.
  • Döredilen we başlangyç obýekt bilen baglanyşyk emele gelýär. Bu salgylanma, obýekti döredýän aňlatmanyň bahasydyr. newInstance()Synp usulyny çagyryp bir obýekt hem döredilip bilner java.lang.Class. Bu ýagdaýda parametr sanawy bolmadyk konstruktor ulanylýar.

Artykmaç konstruktorlar

Bir synpyň gurluşykçylary birmeňzeş at we dürli gol bolup bilerler. Bu emläk kombinasiýa ýa-da artykmaç ýüklemek diýilýär. Bir synpda birnäçe konstruktor bar bolsa, konstruktoryň artykmaç ýüklemesi bar.

Parametrlenen konstruktorlar

Konstruktoryň goly, parametrleriň sany we görnüşleri, şeýle hem konstruktor parametrleriniň sanawynda olaryň görnüşleriniň yzygiderliligi. Yza gaýtaryş görnüşi göz öňünde tutulmaýar. Konstruktor hiç hili parametrleri yzyna gaýtarmaýar. Bu jümle, belli bir derejede Java-yň aşa ýüklenen konstruktorlary ýa-da usullary nädip tapawutlandyrýandygyny düşündirýär. Java artykmaç ýüklenen usullary gaýdyp geliş görnüşi bilen däl-de, giriş parametrleriniň görnüşleriniň sany, görnüşleri we yzygiderliligi bilen tapawutlandyrýar. Konstruktor hatda görnüşini hem yzyna gaýtaryp bilmeýär void, ýogsam synpyň adyna meňzeýän hem bolsa adaty usula öwrüler. Aşakdaky mysal muny görkezýär. FaýlVoidDemo.java
class VoidDemo
{
 /**
  * Это конструктор
  */
 VoidDemo()
 {
  System.out.println("Constructor");
 }

 /**
  * А это уже обычный метод, даже не смотря на сходство с
  * именем класса, поскольку имеется возвращаемый тип void
  */
 void VoidDemo()
 {
  System.out.println("Method");
 }

 public static void main(String s[])
 {
  VoidDemo m = new VoidDemo();
 }
}
Netijede, programma çykar:
Constructor
Bu, konstruktoryň gaýdyp gelme parametrleri bolmadyk usuldygyny ýene bir gezek subut etdi. Şeýle-de bolsa, konstruktora üç üýtgeýjiniň biri ýa-da publicberilip bilner . Mysal indi şeýle bolar: FaýlprivateprotectedVoidDemo2.java
class VoidDemo2
{
 /**
  * Это конструктор
  */
 public VoidDemo2()
 {
  System.out.println("Constructor");
 }

 /**
  * А это уже обычный метод, даже не смотря на сходство с
  * именем класса, поскольку имеется возвращаемый тип void
  */
 private void VoidDemo2()
 {
  System.out.println("Method");
 }

 public static void main(String s[])
 {
  VoidDemo2 m = new VoidDemo2();
 }
}
Konstruktorda operator ýazmaga rugsat berilýär return, ýöne hiç hili gymmaty bolmazdan diňe boş. FaýlReturnDemo.java
class ReturnDemo
{
 /**
  * В конструкторе допускается использование оператора
  * return без параметров.
  */
 public ReturnDemo()
 {
  System.out.println("Constructor");
  return;
 }

 public static void main(String s[])
 {
  ReturnDemo r = new ReturnDemo();
 }
}

Gurluşykçylar üýtgeýän uzynlykly argumentler bilen parametrleşdirildi

Java SDK 1.5 köpden bäri garaşylýan gural - konstruktorlar we usullar üçin üýtgeýän uzyn argumentleri hödürledi. Ondan öň üýtgeýän sanly resminama iki amatsyz usulda işlenýärdi. Olaryň birinjisi, argumentleriň iň köp sanynyň az sanly bilen çäklenmegini we öňünden belli bolmagyny üpjün etmek üçin döredildi. Bu ýagdaýda usula geçen argumentleriň sanawynyň her wersiýasy üçin usulyň artykmaç ýüklenen wersiýalaryny döretmek mümkin boldy. Ikinji usul öňünden näbelli bir zat we köp sanly argument üçin döredildi. Bu ýagdaýda argumentler bir hatara ýerleşdirildi we bu massiw usula geçirildi. Üýtgeýän uzynlyk argumentleri köplenç üýtgeýän başlangyçlar bilen indiki manipulýasiýalara gatnaşýar. Käbir garaşylýan konstruktoryň ýa-da usul argumentleriniň ýoklugyny standart bahalar bilen çalyşmak amatly. Üýtgeýän uzynlyk argumenti bir massiw bolup, massiw hökmünde seredilýär. Mysal üçin, üýtgeýän sanly argumentli synp üçin konstruktor Checkingşeýle bolar:
class Checking
{
 public Checking(int ... n)
 {
 }
}
Nyşanlaryň utgaşmasy ... düzüjä üýtgeýän köp sanly argumentiň ulanyljakdygyny we bu argumentleriň n üýtgeýjisinde salgylanma bahasy bolan massiwde saklanjakdygyny aýdýar. Gurluşykçyny dürli argumentler bilen çagyryp bolar, asla argument ýok. Argumentler awtomatiki usulda bir massiwde ýerleşdirilýär we n-den geçýär. Argument ýok bolsa, massiwiň uzynlygy 0 bolýar. Üýtgeýän uzynlyk argumentleri bilen birlikde parametrleriň sanawy hökmany parametrleri hem öz içine alyp biler. Bu ýagdaýda üýtgeýän sany argumenti öz içine alýan parametr parametrleriň sanawynda iň soňky bolmalydyr. Mysal üçin:
class Checking
{
 public Checking(String s, int ... n)
 {
 }
}
Örän üýtgeýän çäklendirme üýtgeýän uzynlyk parametrleriniň sanyna degişlidir. Parametrleriň sanawynda diňe bir üýtgeýän uzynlykly parametr bolmaly. Iki üýtgeýän uzynlyk parametrini göz öňünde tutup, düzüjiniň bir parametriň nirede gutarýandygyny, beýlekisiniň nireden başlanýandygyny kesgitlemek mümkin däl. Mysal üçin:
class Checking
{
 public Checking(String s, int ... n, double ... d) //ОШИБКА!
 {
 }
}
Faýl Checking.java Mysal üçin, awtoulag belgilerini tanamaga we gündizine awtoulaglaryň hersiniň baryp görýän ýeriniň meýdançalarynyň sanyny ýatda saklamaga ukyply enjamlar bar. Recordedazga alnan awtoulaglaryň umumy massasyndan günüň kartasy boýunça 22 we 15 diýilýän iki meýdana baryp görenleri saýlamaly. Awtoulagyň gündiz köp meýdançalara baryp görmegi ýa-da diňe bir bolmagy mümkin. Elbetde, baryp gören meýdançalaryň sany awtoulagyň fiziki tizligi bilen çäklenýär. Geliň, kiçijik bir programma döredeliň, bu ýerde synp konstruktory awtoulag belgisini hökmany parametr hökmünde we sany üýtgäp bilýän meýdanyň baryp gören meýdançalarynyň sanyny argument hökmünde kabul eder. Konstruktor awtoulagyň iki kwadratda peýda bolandygyny ýa-da ýokdugyny barlar, eger bar bolsa, belgisini ekranda görkeziň.

Parametrleri konstruktora geçirmek

Programmirleme dillerinde esasan iki görnüşli parametr bar:
  • esasy görnüşleri (başlangyçlar);
  • obýektlere salgylanmalar.
Çagyryş gymmaty, konstruktoryň çagyryş moduly tarapyndan özüne berlen bahany alýandygyny aňladýar. Munuň tersine, salgylanma boýunça jaň etmek, konstruktoryň üýtgeýäniň adresini jaň edijiden alýandygyny aňladýar. Java jaňy diňe bahasy boýunça ulanýar. Parametr bahasy we parametr baglanyşygy boýunça. Java jaňlary obýektler üçin ulanmaýar (köp programmistler we käbir kitaplaryň awtorlary muny öňe sürýärler). Obýektleri Java-a geçireniňizde, parametrler salgylanma bilen däl -de, obýekt salgylanmasynyň bahasy bilen geçýär ! Iki ýagdaýda-da konstruktor ähli parametrleriň bahalarynyň nusgalaryny alýar. Konstruktor giriş parametrleri bilen edip bilmeýär:
  • konstruktor esasy (başlangyç) görnüşleriň giriş parametrleriniň bahalaryny üýtgedip bilmez;
  • konstruktor giriş parametrleriniň salgylanmalaryny üýtgedip bilmez;
  • konstruktor giriş parametrlerine salgylanmalary täze obýektlere täzeden belläp bilmeýär.
Konstruktor giriş parametrleri bilen edip biler:
  • giriş parametri hökmünde geçen obýektiň ýagdaýyny üýtgetmek.
Aşakdaky mysal, Java-da konstruktoryň giriş parametrleriniň obýekt salgylanma bahasyndan geçýändigini subut edýär. Bu mysal, konstruktoryň giriş parametrleriniň salgylanmalaryny üýtgedip bilmeýändigini, aslynda giriş parametrleriniň nusgalarynyň salgylanmalaryny üýtgedýändigini görkezýär. FaýlEmpoyee.java
class Employee
{
 Employee(String x, String y)
 {
  String temp = x;
  x = y;
  y = temp;
 }
 public static void main(String args[])
 {
  String name1 = new String("Alice");
  String name2 = new String("Mary");
  Employee a = new Employee(name1, name2);
  System.out.println("name1="+name1);
  System.out.println("name2="+name2);
 }
}
Programmanyň netijesi:
name1=Alice
name2=Mary
Java jaňlary obýektleri parametr hökmünde görkezmek üçin ulanýan bolsa, konstruktor çalşar name1we bu mysalda name2. name1Konstruktor aslynda üýtgeýänlerde saklanýan obýekt salgylanmalaryny çalyşmaz name2. Bu, konstruktoryň parametrleriniň bu salgylanmalaryň nusgalary bilen başlandygyny görkezýär. Soňra konstruktor nusgalary çalyşýar. Konstruktor işini tamamlanda, x we ​​y üýtgeýjiler ýok edilýär we asyl üýtgeýjiler öňki obýektlere degişlidir name1.name2

Parametrleri üýtgetmek konstruktora geçdi.

Konstruktor esasy görnüşleriň geçen parametrlerini üýtgedip bilmez. Şeýle-de bolsa, konstruktor parametr hökmünde geçen obýektiň ýagdaýyny üýtgedip biler. Mysal üçin, aşakdaky programmany gözden geçiriň: FaýlSalary1.java
class Salary1
{
 Salary1(int x)
 {
  x = x * 3;
  System.out.println("x="+x);
 }
 public static void main(String args[])
 {
  int value = 1000;
  Salary1 s1 = new Salary1(value);
  System.out.println("value="+value);
 }
}
Programmanyň netijesi:
x=3000
value=1000
Elbetde, bu usul esasy görnüş parametrini üýtgetmez. Şonuň üçin konstruktory çagyrandan soň üýtgeýjiniň bahasy valuedeňdir 1000. Aslynda üç zat bolup geçýär:
  1. Üýtgeýji parametr bahasynyň (ýagny san ) xgöçürmesi bilen başlaýar .value1000
  2. Üýtgeýjiniň bahasy xüç esse - indi deňdir 3000. Şeýle-de bolsa, üýtgeýjiniň bahasy valuedeňdir 1000.
  3. Konstruktor gutarýar we üýtgeýji xindi ulanylmaýar.
Aşakdaky mysalda, işgäriň aýlygy üstünlikli üç esse ýokarlanýar, sebäbi obýekt salgylanmasynyň bahasy usula parametr hökmünde geçirilýär. FaýlSalary2.java
class Salary2
{
 int value = 1000;
 Salary2()
 {
 }
 Salary2(Salary2 x)
 {
  x.value = x.value * 3;
 }
 public static void main(String args[])
 {
  Salary2 s1 = new Salary2();
  Salary2 s2 = new Salary2(s1);
  System.out.println("s1.value=" +s1.value);
  System.out.println("s2.value="+s2.value);
 }
}
Programmanyň netijesi:
s1.value=3000
s2.value=1000
Obýekt salgylanmasynyň bahasy parametr hökmünde ulanylýar. Setir ýerine ýetirilende Salary2 s2 = new Salary2(s1); konstruktor Salary2(Salary x)üýtgeýän obýekte salgylanmanyň bahasyndan geçer s1we konstruktor aýlyk hakyny üç esse artdyrar , sebäbi konstruktoryň içinde döredilen s1.valuegöçürme hem üýtgeýän obýekti görkezýär . (Salary x)s1

Ilkinjiler bilen parametrlenen konstruktorlar.

Artykmaç konstruktoryň parametrleri daralyp bilinýän primitiw ulanýan bolsa (meselem int <- double), şunuň ýaly parametr bilen artykmaç usul ýoklugyna garamazdan, dar bahasy bolan usuly çagyrmak mümkin. Mysal üçin: FaýlPrimitive.java
class Primitive
{
 Primitive(double d)
 {
  d = d + 10;
  System.out.println("d="+d);
 }
 public static void main(String args[])
 {
  int i = 20;
  Primitive s1 = new Primitive(i);
 }
}
Programmanyň netijesi:
d=30.0
PrimitiveSynpda görnüş parametri bolan konstruktoryň ýokdugyna garamazdan int, giriş parametri bolan konstruktor işlär double. Konstruktora jaň etmezden ozal üýtgeýji görnüşden görnüşe igiňeldiler . Tersine, üýtgeýjiniň görnüşi bolanda we konstruktoryň diňe bir parametri bolanda , bu ýagdaýda düzmek ýalňyşlygyna sebäp bolar. intdoubleidoubleint

Gurluşykçy jaň we operatornew

Konstruktor elmydama operator tarapyndan çagyrylýar new. Haçan-da operator bilen bir konstruktor çagyrylsa new, konstruktor elmydama täze bir obýekte salgylanma döredýär. Gurluşygy täze desganyň salgylanmasynyň ýerine eýýäm bar bolan obýekte salgylanma döretmäge mejbur etmek mümkin däl, desilizasiýa edilen obýektiň ornuny tutmakdan başga. Täze operator bilen täze obýekte baglanyşyk ýerine, eýýäm bar bolan obýekte baglanyşyk döretmek mümkin däl. Mysal üçin: FaýlSalary3.java
class Salary3
{
 int value = 1000;
 Salary3()
 {
 }
 Salary3(Salary3 x)
 {
  x.value = x.value * 3;
 }
 public static void main(String args[])
 {
  Salary3 s1 = new Salary3();
  System.out.println("First object creation: "+s1.value);

  Salary3 s2 = new Salary3(s1);
  System.out.println("Second object creation: "+s2.value);
  System.out.println("What's happend with first object?:"+s1.value);

  Salary3 s3 = new Salary3(s1);
  System.out.println("Third object creation: "+s3.value);
  System.out.println("What's happend with first object?:"+s1.value);
 }
}
Programmanyň netijesi:
First object creation: 1000
Second object creation: 1000
What's happend with first object?: 3000
Third object creation: 1000
What's happend with first object?: 9000
Ilki bilen setiri ulanmak Salary3 s1 = new Salary3(); täze obýekt döredilýär. Indiki, setiri ulanýan bolsaňyz Salary3 s2 = new Salary3(s1); ýa-da setirler Salary3 s3 = new Salary3(s1); eýýäm bar bolan obýekte baglanyşyk döretmek mümkin bolardy, soň şol bir bahany s1.value s2.valuesaklardylar . Aslynda setirde ; üýtgeýji üçin täze obýekt dörediler we üýtgeýän üçin obýektiň ýagdaýy konstruktor parametrindäki obýekte salgylanma bahasyny üýtgetmek arkaly üýtgär. Muny çykyş netijeleri bilen tassyklap bolýar. Setir ýerine ýetirilende ; Üýtgeýji üçin täze bir obýekt dörediler we üýtgeýän üçin obýektiň ýagdaýy täzeden üýtgär . s3.value1000Salary3 s2 = new Salary3(s1)s2s1Salary3 s3 = new Salary3(s1)s3s1

Gurluşykçylar we başlangyç bloklary, konstruktor çagyrylanda hereketleriň yzygiderliligi

Obýekt we gurluşykçylary döretmek bölüminde obýekt döredilende ýerine ýetirilýän umumy hereketler sanalýar. Olaryň arasynda synp meýdanlaryny başlamak we synp konstruktoryny işlemek prosesi bar, bu bolsa öz gezeginde içerki tertibe eýe:
  1. Datahli maglumat meýdanlary başlangyç bahalaryna başlaýar (0, ýalan ýa-da null).
  2. Fieldhli meýdan başlangyçlary we başlangyç bloklary synp deklarasiýasynda görkezilen tertipde ýerine ýetirilýär.
  3. Eger konstruktoryň birinji setirinde başga bir konstruktor çagyrylsa, onda konstruktor diýilýär.
  4. Konstruktoryň jesedi ýerine ýetirilýär.
Konstruktor başlangyç bilen baglanyşykly, sebäbi Java-da synpda bir meýdan başlamagyň üç usuly bar:
  • beýannamada baha bellemek;
  • başlangyç blokda bahalary belläň;
  • bahasyny konstruktorda belläň.
Elbetde, düşünmek aňsat bolar ýaly başlangyç koduny tertipleşdirmeli. Mysal hökmünde aşakdaky synp berilýär:
class Initialization
{
 int i;
 short z = 10;
 static int x;
 static float y;
 static
 {
  x = 2000;
  y = 3.141;
 }
 Initialization()
 {
  System.out.println("i="+i);
  System.out.println("z="+z);
  z = 20;
  System.out.println("z="+z);
 }
}
Aboveokardaky mysalda üýtgeýjiler aşakdaky tertipde başlaýar: statiki üýtgeýjiler ilki bilen başlangyç bahalar xbilen başlaýar y. Ondan soň statiki başlangyç blok ýerine ýetirilýär. Soňra üýtgeýji ibaşlangyç bahasyna, üýtgeýjisi başlangyç bolýar z. Soň bolsa dizaýner işe başlaýar. Synp gurluşykçylaryny çagyrmak, meýdanlaryň yglan ediliş tertibine bagly bolmaly däldir. Bu ýalňyşlyklara sebäp bolup biler.

Gurluşykçylar we miras

Gurluşykçylar miras galanok. Mysal üçin:
public class Example
{
 Example()
 {
 }
 public void sayHi()
 {
  system.out.println("Hi");
 }
}

public class SubClass extends Example
{
}
Synp ene synpda kesgitlenen SubClassusuly awtomatiki miras alýar . sayHi()Şol bir wagtyň özünde, ene synpyň konstruktory Example()onuň neslinden miras galanok SubClass.

thisGurluşykçylarda açar söz

thisGurluşykçylar şol bir synpdaky, ýöne parametrleriň başga sanawy bilen başga bir konstruktora ýüzlenmek üçin ulanylýar . Gurluşykçy açar söz ulanýan bolsa this, birinji setirde bolmaly; bu düzgüni äsgermezlik düzüjiniň ýalňyşlygyna sebäp bolar. Mysal üçin: FaýlThisDemo.java
public class ThisDemo
{
 String name;
 ThisDemo(String s)
 {
  name = s;
     System.out.println(name);
 }
 ThisDemo()
 {
  this("John");
 }
 public static void main(String args[])
 {
  ThisDemo td1 = new ThisDemo("Mary");
  ThisDemo td2 = new ThisDemo();
 }
}
Programmanyň netijesi:
Mary
John
Bu mysalda iki konstruktor bar. Birinjisi setir argumentini alýar. Ikinjisi hiç hili argument almaýar, diňe adaty ady "Jon" ulanyp, ilkinji konstruktory çagyrýar. Şeýlelik bilen, programmalarda köplenç zerur bolan meýdan bahalaryny aç-açan we başlangyç görnüşde başlamak üçin konstruktorlary ulanyp bilersiňiz.

superGurluşykçylarda açar söz

superGurluşykçylar superklass konstruktor diýmek üçin ulanylýar . Konstruktor ulanýan bolsa super, bu jaň birinji setirde bolmaly, ýogsam düzüji ýalňyşlyk goýberer. Aşakda bir mysal: FaýlSuperClassDemo.java
public class SuperClassDemo
{
 SuperClassDemo()
 {
 }
}

class Child extends SuperClassDemo
{
 Child()
 {
  super();
 }
}
Bu ýönekeý mysalda, konstruktor synpdan başga-da synpyň mysalyny döredýän Child()jaňy öz içine alýar . Klassiki konstruktorda ýerine ýetirilen ilkinji jümle bolmalydygy sebäpli , bu sargyt hemişe birmeňzeş we ýerine bagly däl . Ulanylmasa, esasy synpdan başlap, her superklasyň deslapky (parametrleri ýok) konstruktor ilki ýerine ýetiriler. Gurluşykçylar ýerine ýetirilende aşakdaky programma görkezýär. Faýlsuper()SuperClassDemoChildsupersuper()Call.java
//Создать суперкласс A
class A
{
 A()
 {
  System.out.println("Inside A constructor.");
 }
}

//Создать подкласс B, расширяющий класс A
class B extends A
{
 B()
 {
  System.out.println("Inside B constructor.");
 }
}

//Создать класс (C), расширяющий класс В
class C extends B
{
 C()
 {
  System.out.println("Inside C constructor.");
 }
}

class Call
{
 public static void main(String args[])
 {
  C c = new C();
 }
}
Bu programmanyň netijesi:
Inside A constructor.
Inside B constructor.
Inside C constructor.
Gurluşykçylara synp tabynlygy boýunça çagyrylýar. Bu birneme many berýär. Superklassyň haýsydyr bir kiçi klassy bilmeýändigi sebäpli, ýerine ýetirmeli islendik başlangyç aýratyn. Mümkin bolsa, kiçi klas tarapyndan ýerine ýetirilen islendik başlangyçdan öň bolmaly. Şonuň üçin ilki bilen edilmeli.

Özbaşdak gurulýan konstruktorlar

Işleýiş görnüşini kesgitlemek mehanizmi, Java diliniň polimorfizmi durmuşa geçirýän güýçli esasy ýörelgelerinden biridir. Şeýle-de bolsa, şeýle mehanizm işläp düzüjini käbir ýagdaýlarda gabat gelmeýän görnüşden goramaýar. Iň ýaýran ýagdaý, dürli görnüşleri öňünden belli däl we iş wagtynda kesgitlenýän obýektler toparynyň manipulýasiýasydyr. Görnüşiň gabat gelmezligi bilen baglanyşykly ýalňyşlyklar diňe iş döwründe ýüze çykyp bilýändigi sebäpli, olary tapmagy we ýok etmegi kynlaşdyrýar. Java 2 5.0-de adaty görnüşleriň girizilmegi bu ýalňyşlyklaryň käbirini iş wagtyndan wagt düzmeklige geçirýär we ýitirilen görnüşleriň howpsuzlygyny üpjün edýär. ObjectBir görnüşden beton görnüşe geçeniňizde aç-açan görnüşli guýma zerurlygy ýok . Hususylaşdyrma gurallarynyň diňe obýektler bilen işleýändigini we synp miras agajynyň daşynda ýerleşýän başlangyç maglumat görnüşlerine degişlidigini ýatdan çykarmaly däldir. Customörite görnüşler bilen ähli çykdajylar awtomatiki we sahnanyň aňyrsynda ýerine ýetirilýär. Bu, görnüşdäki gabat gelmezliklerden goramaga we kody ýygy-ýygydan ulanmaga mümkinçilik berýär. Constructörite görnüşleri konstruktorlarda ulanyp bolýar. Gurluşykçylar synpy adaty görnüş bolmasa-da adaty bolup bilerler. Mysal üçin:
class GenConstructor
{
 private double val;
 <T extends Number> GenConstructor(T arg)
 {
   val = arg.doubleValue();
 }

 void printValue()
 {
  System.out.println("val: "+val);
 }
}

class GenConstructorDemo
{
 public static void main(String args[])
 {
  GenConstructor gc1 = new GenConstructor(100);
  GenConstructor gc2 = new GenConstructor(123.5F);

  gc1.printValue();
  gc2.printValue();
 }
}
Konstruktor GenConstructorsynpdan alnan synp bolmaly adaty görnüş parametrini kesgitländigi sebäpli Number, ony islendik adamdan çagyryp bolýar
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION