JavaRush /Java Blog /Random-TK /Java-da operatory

Java-da operatory

Toparda çap edildi
Salam! Bu gün mysal operatory barada gürleşeris, ulanylyşynyň mysallaryna serederis we işleýşi bilen baglanyşykly käbir nokatlara degip geçeris :) JavaRush-yň irki derejelerinde bu operatora duş geldiňiz. Näme üçin zerurdygyny ýadyňyzdamy? Notok bolsa, tapawudy ýok, bilelikde ýatda saklalyň. “X” üýtgeýjisine salgylanylýan obýektiň “Y.” synpynyň esasynda döredilendigini ýa-da ýokdugyny barlamak üçin mysal operatory zerurdyr. Näme üçin bu mowzuga gaýdyp geldik? Ilki bilen, sebäbi indi Java-da miras mehanizmi we beýleki OOP ýörelgeleri bilen gowy tanyş. Mysal üçin mowzuk has düşnükli bolar we has ösen ulanylyş ýagdaýlaryna serederis. Git! Synag dogry bolsa ýa-da netije ýalňyş bolsa ýalanInstanceof operatory nähili işleýär - 1 bolsa, mysal operatory yzyna gaýdyp gelýär . Netijede, köplenç synag şertleriniň dürli görnüşlerinde bolýar ( ). Has ýönekeý mysallardan başlalyň: if…else
public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof Integer);
   }
}
Siziň pikiriňizçe konsola näme çykar? Dogrusy, bu ýerde düşnükli :) Obýekt хbitewi, şonuň üçin netije dogry bolar . Konsol çykyşy: true Geliň, meselem, String-e degişlidigini barlamaga synanyşalyň:
public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof String);// error!
   }
}
Erroralňyşlyk aldyk Üns beriň: düzüji kod ýerine ýetirilmänkä çykardy! Integer we String-iň awtomatiki usulda biri-birine öwrülip bilmejekdigini we miras gatnaşyklarynyň ýokdugyny derrew gördi. Şonuň üçin “Integer” synp obýekti “String” -den döredilmez. Bu amatly we programmanyň ýerine ýetirilişinde eýýäm geň ýalňyşlyklaryň öňüni almaga kömek edýär, şonuň üçin düzüji bize bu ýerde kömek etdi :) Indi has çylşyrymly mysallara göz aýlamaga synanyşalyň. Miras hakda aýdanymyzdan soň, bu kiçi synp ulgamy bilen işleşeliň:
public class Animal {

}

public class Cat extends Animal {

}

public class MaineCoon extends Cat {

}
Bir obýektiň adaty bir klasa degişlidigini ýa-da ýokdugyny barlanda, mysallaryň özüni alyp barşyny eýýäm bilýäris, ýöne bu ýerde ene-ata gatnaşyklaryny goşsak näme bolar? Instanceof operatory nähili işleýär - 2 Mysal üçin, aşakdaky barlag näme öndürer diýip pikir edýärsiňiz:
public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();

       System.out.println(cat instanceof Animal);

       System.out.println(cat instanceof MaineCoon);

   }
}
Çykyş: hakyky ýalan Jogap berilmeli esasy sorag, mysal üçin “synpa esaslanan döredilen obýekt” düşünjesini nädip kesgitleýär? Netijede, düşündik Сat instanceof Animal == true, ýöne şeýle formulada kemçilik tapyp bolýar. Näme üçin bu obýekt Catsynpa esaslanýar Animal? Diňe öz synpyna esaslanyp döredilenokmy? Jogap gaty ýönekeý, siz eýýäm düşünip bilersiňiz. Gurluşykçylaryň çagyryş tertibini we obýekt döredilende üýtgeýjileriň başlanýandygyny ýadyňyzdan çykarmaň. Bu temany synp konstruktory baradaky makalada eýýäm açypdyk . Ine, şol leksiýadan bir mysal:
public class Animal {

   String brain = "The initial value of brain in the Animal class";
   String heart = "The initial value of heart in the Animal class";

   public static int animalCount = 7700000;

   public Animal(String brain, String heart) {
       System.out.println("The constructor of the Animal base class is being executed");
       System.out.println("Have the variables of the Animal class already been initialized?");
       System.out.println("The current value of the static variable animalCount = " + animalCount);
       System.out.println("Current value of brain in class Animal = " + this.brain);
       System.out.println("Current value of heart in class Animal = " + this.heart);

       this.brain = brain;
       this.heart = heart;
       System.out.println("Animal base class constructor completed!");
       System.out.println("Current value of brain = " + this.brain);
       System.out.println("Current value of heart = " + this.heart);
   }
}

class Cat extends Animal {

   String tail = "The initial value of tail in the Cat class";

   static int catsCount = 37;

   public Cat(String brain, String heart, String tail) {
       super(brain, heart);
       System.out.println("The constructor of the Cat class has started (the Animal constructor has already been executed)");
       System.out.println("The current value of the static variable catsCount = " + catsCount);
       System.out.println("Current value tail = " + this.tail);
       this.tail = tail;
       System.out.println("Current value tail = " + this.tail);
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
IDE-de işledseňiz, konsolyň çykyşy şeýle bolar: Haýwanlaryň esasy synpynyň konstruktory işleýär. Haýwan synpynyň üýtgeýjileri eýýäm işe girizildimi? Statiki üýtgeýän haýwanlaryň häzirki bahasyCount = 7700000 Haýwanlar synpynda beýniniň häzirki gymmaty = Haýwanlar synpynda beýniniň başlangyç gymmaty Haýwanlar synpynda ýüregiň häzirki gymmaty = Haýwanlar synpynda ýüregiň başlangyç gymmaty Haýwan synpynyň konstruktory işini tamamlady! Beýniniň häzirki gymmaty = Beýni heartüregiň häzirki gymmaty = Heartürek Pişik synpynyň konstruktory işe başlady (Haýwan konstruktory eýýäm ýerine ýetirildi) Statik üýtgeýän pişikleriň häzirki bahasyCount = 37 Guýrugyň häzirki bahasy = Guýrugyň başlangyç bahasy Pişik synpy Guýrugyň häzirki bahasy = Guýruk Indi ýadyňyzdamy? :) Esasy synp konstruktory, bar bolsa, islendik obýekt döredilende hemişe ilki diýilýär. АInstanceof, bir synpdan bir obýektiň döredilendigini ýa-da ýokdugyny anyklamaga synanyşanda bu ýörelgä eýerýär Б. Esasy synp konstruktory diýilse, şübhe bolup bilmez. Ikinji barlag bilen hemme zat has ýönekeý:
System.out.println(cat instanceof MaineCoon);
Konstruktor MaineCoondöredilende çagyrylmady Cat, bu mantykly. Galyberse-de, MaineCoonol Catata-baba däl-de, nesil. Itöne Catbu şablon däl. Bolýar, bu düşnükli ýaly. Muny etsek näme bolar:
public class Main {

   public static void main(String[] args) {

       Cat cat = new MaineCoon();

       System.out.println(cat instanceof Cat);
       System.out.println(cat instanceof MaineCoon);


   }
}
Hmm ... bu has çylşyrymly. Pikirlenmäge synanyşalyň. Biziň görnüşimiziň üýtgeýjisi bar Catwe oňa bir görnüş obýekti belledik MaineCoon. ? Eri gelende aýtsak, bu näme üçin işleýär? Muny edip bolarmy? Bolup biler. Galyberse-de, islendik Maine Kun pişikdir. Eger düýbünden düşnükli däl bolsa, başlangyç görnüşli giňeltmeler bilen mysaly ýatda saklaň:
public class Main {

   public static void main(String[] args) {

       long x = 1024;

   }
}
1024 sany gysga : uzyn üýtgeýjä aňsatlyk bilen gabat gelýär , sebäbi baýtlaryň sany oňa ýeterlikdir (höwürtge gurjaklary bilen mysaly ýadyňyzdamy?). Çaga obýekti hemişe ata-baba üýtgeýjisine bellenip bilner. Muny häzirlikçe ýadyňyzda saklaň we indiki leksiýalarda bu prosesi hasam seljereris. Onda mysalymyz näme öndürer?
Cat cat = new MaineCoon();
System.out.println(cat instanceof Cat);
System.out.println(cat instanceof MaineCoon);
Barlag mysallary: synp üýtgeýjimiz Catýa-da synp obýektimiz MaineCoon? Aslynda bu soraga jogap ýönekeý. Diňe operatorymyzyň kesgitlemesini täzeden okamalysyňyz: Üýtgeýji tarapyndan görkezilen obýektiň Xkäbir synplara esaslanyp döredilendigini ýa-da ýokdugyny barlamak üçin mysal operatory zerur Y. Mysal operatory üýtgeýjini däl-de, obýektiň gelip çykyşyny barlaýar. Şonuň üçin, mysalda, iki gezek konsolda hakyky görkeziler : görnüşimiz bar MaineCoon. MaineCoonElbetde, bu klasa esaslanyp , ene-atalar synpyna esaslanyp döredildi Cat!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION