JavaRush /Java Blog /Random-TK /Java dörediji üçin geçirilen söhbetdeşliklerden soraglary...

Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi. 5-nji bölüm

Toparda çap edildi
Salam, salam! Häzirki wagtda “Java” döredijilere uly isleg bildirilýär. Elbetde, size boş ýer berip bilmerin, ýöne täze bilim alarsyňyz we käbir boşluklary ýaparsyňyz diýip size azajyk kömek etjek bolaryn. Şeýlelik bilen, Java dörediji üçin 250+ söhbetdeşlik soraglaryny derňemegi dowam etdirýäris . Derňewiň öňki bölümlerine baglanyşyklar makalanyň ahyrynda.Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  5-nji bölüm

39. Java-da giriş üýtgedijileri näme? Olara at beriň. Olar näme üçin ulanylýar?

Java encapsulation elementleri baradaky soragda giriş üýtgeýjilerini öňem düşündiripdim. Wayöne her niçigem bolsa ýatladaryn. Java-da giriş üýtgedijileri, belli bir Java komponentine berlen giriş derejesini beýan edýän açar sözlerdir. Giriş üýtgedijileri bolup biler:
  • köpçülige - bu üýtgediji bilen bir element köpçülige elýeterli bolar. Bular. meýdanlar we usullar, köpçülige üýtgediji bilen yglan edilen synplar häzirki paketden we daşarky paketlerden beýleki synplara görünýär;
  • goragly - bu üýtgediji elemente häzirki paketiň häzirki synpynyň islendik ýerinde ýa-da beýleki paketlerde bolsa-da nesil synplarynda elýeterli bolar;
  • deslapky ýa-da ýitirilen üýtgediji - giriş üýtgediji düýbünden görkezilmedik ýagdaýynda bu üýtgediji doly ulanylýar. Öňki paketlere meňzeýär, beýleki paketlerdäki nesil synplarynda görünmäge rugsat berilýär;
  • hususy , ähli modifikatorlaryň arasynda iň şahsysy bolup, elemente diňe häzirki synpyň içinde girmäge mümkinçilik berýär.
Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  5-nji bölüm

40. Statik we üýtgeýän usullaryň esasy aýratynlygyny aýdyň

Örän geň formula - “üýtgeýän usullar”. Elbetde, bu adaty, statik däl usullara degişlidir. Şeýlelik bilen, esasy tapawut, statiki usullaryň synpa degişlidigi we aslynda olar üçin bu synpyň mysalyny döretmegiň zerurlygy ýok: ony diňe synp görnüşini ulanyp atlandyryp bolar. Mysal üçin, pişigi haýwan etmek üçin statiki usulymyz bar:
public class CatService {
   public static void petTheCat(Cat cat) {
       System.out.println("Погладить кота - " + cat.getName());
   }
Oňa “CatService” synpynyň mysaly gerek däl :
Cat cat = new Cat(7, "Bobi");
CatService.petTheCat(cat);
Ordinaryönekeý usullar bir obýekte (degişlidir) we olara jaň etmek üçin usulyň çagyryljak mysaly (obýekti) bolmaly. Mysal üçin, pişigiň statik däl usuly bar - meowing:
class Cat {
   public void mew() {
       System.out.println("Meow! Meow! Meow!");
   }
Bu usuly çagyrmak üçin bize pişigiň belli bir mysaly gerek:
Cat cat = new Cat(7, "Bobi");
cat.mew();

41. Statiki we “üýtgeýän” usullara esasy çäklendirmeler haýsylar?

Öň hem aýdyşym ýaly, adaty usulyň esasy çäklendirmesi, usulyň atlandyryljak mydama mysaly bolmalydyr. Aöne statiki usul muny talap etmeýär, ýöne bu salgylanmany - häzirki obýektiň elementlerine salgylanyp bilmeýär - sebäbi häzirki obýekt onuň üçin ýok.

42. Statik açar söz nämäni aňladýar? Statik usuly artykmaç edip bolarmy ýa-da artykmaç ýükläp bolarmy?

Statik açar söz bilen kesgitlenen element synpyň obýektine däl-de, eýsem synpa degişlidir we synpyň özi ýüklenende ýüklenýär. Statik elementler tutuş programma üçin ýeke-täk, yzygiderli elementler bolsa belli bir obýekt üçin ýeke-täk elementdir. Statik bolup biler:
  • synp meýdanlary;
  • synp başlangyç bloky;
  • synp usuly;
  • synpyň içerki synplary (muňa garamazdan, henizem tautologiýa).
Statik usuly ýok edip bolmaýar: ol klasa degişlidir we miras galanok, şol bir wagtyň özünde aşa ýüklenip bilner.

43. Usul bir wagtyň özünde statiki we abstrakt bolup bilermi?

Muny öňki makalada aýdypdym: bir usul abstrakt we statik bolup bilmez. Usulyň abstraktlygy, mirasdüşerde ýok edilmelidigini aňladýar. Şol bir wagtyň özünde, statiki usul synpa degişlidir we ony ýazyp bolmaz: bu gapma-garşylyga sebäp bolar, düzüjiniň görüp, näletläp başlar. Şeýle ýagdaý bar bolsa, programmaňyzyň arhitekturasynyň dogrulygy barada çynlakaý pikirlenmeli (ahyrsoňy, munuň bilen baglanyşykly nädogry bir zat bar).Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  5-nji bölüm

44. Adaty usullaryň arasynda statiki usullary ulanmak mümkinmi? Tersine? Näme üçin?

Statik usullary yzygiderli ulanyp bolýar, sebäbi hiç zat muňa päsgel bermeýär. Şol bir wagtyň özünde ters ýagdaý mümkin däl: statiki usul bu synpyň belli bir mysalyna salgylanmazdan adaty usuly ulanyp bilmez. Rememberadymyzda bolsa, bu salgylanma statiki synp agzalary üçin elýeterli däl: synpyň isleýşi ýaly köp sanly obýekt bolup biler we olaryň hersiniň içinde özüne salgylanma bolar - şu . Onda bu baglanyşygy haýsy aýratyn almalydygyňyza nädip düşünersiňiz ? Emma ýol ýok. Şonuň üçin statiki elementler belli bir obýekte salgylanmazdan statik däl elementlere degişli bolup bilmez. Aslynda, statiki usul statik däl usuly diňe belli bir obýekte salgylanma bolan ýagdaýynda ulanyp biler. Mysal üçin, argument hökmünde gelen:
public static void petTheCat(Cat cat) {
   System.out.println("Погладить кота - " + cat.getName());
}
Bu ýerde statiki usulyň petTheCat, Cat obýektiniň adaty, statik däl usuly - getName diýip atlandyrýandygyny görýäris .

45. Interfeýs näme? Soňky interfeýs bolup bilermi?

.Adymyzda bolsa, Java-da köp miras ýok. Interfeýsler oňa alternatiw bir zat. Interfeýs gaty ýykylan synpa meňzeýär. Bu interfeýsleri amala aşyrýan (durmuşa geçirýän) synplar tarapyndan amala aşyrylýan belli bir durmuşa geçirmezden işlemegi kesgitleýärler. Interfeýsiň mysaly:
public interface Animal {
    void voice();
}
Bir synp tarapyndan interfeýsi durmuşa geçirmegiň mysaly:
class Cat implements Animal {

   @Override
   public void voice() {
       System.out.println("Meow! Meow! Meow!");
   }
}
Interfeýsleri ulanmak barada bilmeli esasy zadyňyz:
  1. Interfeýs usullary, diňe belli bir usul organy bolmazdan diňe sözbaşy bolmaly. abstrakt bolmaly (ýöne abstrakt açar söz ulanman ). Munuň kadasy statiki we adaty usullar bolup, usulyýeti talap edýär.
  2. Bir synp köp interfeýsleri amala aşyryp biler (aýdyşym ýaly, bu köp mirasa alternatiwadyr), bular bilen bölünip ýazylýar: Arslan synpy Haýwan, Wildabany amala aşyrýar .
  3. Interfeýsler açar söz - interfeýs arkaly döredilýär .
  4. Bir synp tarapyndan interfeýs ýerine ýetirilende açar söz ýerine ýetirilýär .
  5. Belli bir interfeýsi amala aşyrýan synp, abstrakt usullarynyň hemmesini durmuşa geçirmeli ýa-da özüni abstrakt diýip yglan etmeli.
  6. Interfeýsleri ulanmagyň esasy maksady polimorfizmi amala aşyrmakdyr (obýektleriň köp görnüşi almak ukyby).
  7. Düzgün bolşy ýaly, usullar üçin giriş üýtgedijileri interfeýsde ýazylmaýar: olar adaty ýagdaýda köpçülige açyk we köpçülige başga üýtgeýjiler kesgitlenip bilinmez. Java 9-dan başlap, usullar üçin şahsy üýtgedijileri ulanyp bilersiňiz .
  8. Interfeýs üýtgeýjileri, adaty ýagdaýda statiki gutarnykly , başgaça aýdylanda, yzygiderli: elmydama göni interfeýsde başlamaly.
  9. Interfeýs obýektini döredip bilmersiňiz.
Interfeýsleriň gutarnykly bolup biljekdigi baradaky soraga jogap elbetde ýok. Galyberse-de, interfeýsleriň düýp manysy durmuşa geçirilmeli. Hemmämiziň gaty gowy ýadymyzda bolşy ýaly, synp derejesinde jemleýji ony miras galdyrmaýar we interfeýs ýagdaýynda durmuşa geçirip bolmaýar. Näme üçin durmuşa geçirip we ulanyp bolmaýan interfeýs gerek? Dogry - zerurlyk ýok! Düzediji şeýle pikir edýär)) Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  5-nji bölümManysy diňe Java 8 bilen interfeýslerde statiki usullaryň girizilmegi bilen ýüze çykdy, ýöne bu interfeýsiň gutarnykly bolup bilmejekdigini üýtgetmedi. Interfeýsler hakda gaty ýüzleý gürledim, sebäbi ... bu giň tema. Java hakda interfeýsler we abstrakt synplaryň we interfeýsleriň arasyndaky tapawut hakda makalalarda has giňişleýin okaň .

46. ​​Statiki meýdanlary nireden başlap bilerin?

Statik meýdanlary başlap bolar:
  • gönüden-göni deklarasiýa arkaly, deň belgi arkaly = ;
  • statiki başlangyç blokda;
  • statik däl başlangyç blokda, ýöne her gezek bir obýekt döredilende, bu meýdanyň bu başlangyç blok tarapyndan ýazyljakdygyna düşünmeli;
  • synp konstruktorynda. Her gezek bu konstruktor diýlende (ýagny, bu konstruktoryň üsti bilen bir zat döredilende), bu meýdan gaýtadan ýazylar;
  • statiki usullarda;
  • statik däl usullarda;
  • içerki statiki we statik däl, ýerli we anonim synplarda.

47. Anonim synplar näme?

Anonim synplar öz görnüşi bolmadyk synplardyr. Men näme hakda gürleşýärin? Interfeýsler barada aýdanymyzda, interfeýs obýektini döredip bilmejekdigiňizi belledim: diňe interfeýsi amala aşyrýan synp obýektini döredip bilersiňiz. Bir synpda interfeýsi durmuşa geçirmek islemeýän bolsaňyz, ýöne interfeýs görnüşindäki obýekt gerek bolsa näme etmeli? Bu obýekti ulanmagyň ýekeje mysaly bolmagy ähtimal. Doly hukukly ýerine ýetiriş synpyny döretmegiň zerurlygy ýok. Muny nädip eder? Dogry! Anonim synpyň üsti bilen! HaýwanlaryňJava dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  5-5-nji bölüm interfeýsi bar diýeliň :
public final interface Animal {
   public void voice();
}
Bu interfeýsi anonim synpyň üsti bilen çaltlaşdyrmak islesek:
Animal cat = new Animal() {
   @Override
   public void voice() {
       System.out.println("Meow! Meow! Meow!");
   }
};
Soň bolsa bu obýekti we ýerine ýetirilen usuly - sesi arkaýyn ulanyp bilersiňiz . .Agny, näbelli synp bu interfeýsi we ähli abstrakt usullaryny şu wagt we şu wagt amala aşyrýar. Otherwiseogsam, ýerine ýetirilmedik / abstrakt usullar barlygy sebäpli interfeýs / abstrakt synp obýektini döredip bilmeris. .Okarda belläp geçişim ýaly, anonim synplar diňe bir interfeýsiň abstrakt usullaryny durmuşa geçirmek üçin däl, eýsem abstrakt synpyň abstrakt usullaryny hem durmuşa geçirmek üçin ulanylýar. Bu çemeleşme, obýekt bir gezek ulanylsa ýa-da usullaryň belli bir ýerine ýetirilmegi diňe bir gezek zerur bolsa, zerur abstrakt synpy / interfeýsi durmuşa geçirjek aýratyn synp döretmegiň zerurlygy ýok. Şeýle-de bolsa, näbelli synplaryň ulanylmagynyň işde seýrek duş gelýändigini belläp geçerin: adatça adaty synplara artykmaçlyk berilýär. Anonim synplar hakda has giňişleýin maglumaty şu makalada okap bilersiňiz .

48. Ilkinji synplar näme?

Özüm barada aýtsam, bu gaty geň sorag we, belki-de, bu duzakly soragdyr, sebäbi Java-da başlangyç synplar ýaly zat ýok: belki öňem göz öňünde tutan başlangyç görnüşlerimiz düşünjesinden başga. Javaadymyzda bolsa, Java-da 8 sany başlangyç görnüş bar - baýt , gysga , int , uzyn , ýüzýän , goşa , char , boolean .Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  5-nji bölüm

49. “Örtük” synpy näme?

Java-da başlangyç görnüşleri ulanmak bilen baglanyşykly esasy mesele, henizem synp däl we Java henizem OOP dilidir. .Agny, bu dilde ýazylan programmalar obýektleriň arasyndaky täsirleşmek üçin azalýar. Dogrusy, ilkinjiler obýekt däl. Olarda usul ýok, hatda Obýekt synpyndan adaty usullaram ýok . Garaz, Kartada açar hökmünde başlangyç ulanmaly bolsa näme etmeli ? Soňra hashCode usulyna jaň etmeli . Şol ýerde deň usuly çagyryp bilersiňiz . Onda näme? Programmada primitiwleri ulanylmaýan we islenmeýän elementlere öwürýän başlangyç däl-de, synp bolmaly gaty köp pursat bolup biler, sebäbi bu OOP ideýasyny ýok edýär. Everythingöne hemme zat görünişi ýaly erbet däl. Galyberse-de, “Java” -da ýönekeý örtük düşünjesi bar. Her bir başlangyç görnüşde analog synp bar:
  • baýt -> Byte.class
  • gysga -> Gysga.class
  • int -> Integer.class
  • uzyn -> Long.class
  • ýüzmek -> Float.class
  • goşa -> Double.class
  • char -> Character.class
  • boolean -> Boolean.class
Bu ýönekeý görnüşleriň şekillendirilişi, ýöne bir topar dürli we funksional usullar bilen doly hukukly synplar görnüşinde. Bu synplary amatly ulanmak üçin awtobokslamak we gutulmak düşünjeleri girizildi. Awtoboksirlemek - zerur bolan ýagdaýynda başlangyç görnüşi analog synpyna awtomatiki öwürmek (mysal üçin, Integer -e int ). Blokdan çykarmak - bu öňki işiň ters prosesi: başlangyç örtük synpyny awtomatiki görnüşe öwürmek (mysal üçin, Integer int ). Ilkinji örtük sapaklarynyň girizilmegi we awtobokslamak we gutulmak prosesi netijesinde başlangyç görnüşler OOP diliniň - Java-yň doly hukukly agzalary bolup bildiler. Bu mowzuk hakda has giňişleýin öwrenmek üçin bu makalany okamagyňyzy maslahat berýärin .Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  5-7-nji bölüm

50. “Nested” synpy näme? Haçan ulanylýar?

Öýlenen synp, başga bir synpyň agzasy bolan içki synpdyr. Java-da şular ýaly içerki synplaryň 4 görnüşi bar: 1. Içerki synp Bu synp gönüden-göni başga bir synpyň bedeninde yglan edilýär. Içerki içerki synp, islendik synp meýdanyna ýa-da daşarky synpyň usulyna girip biler. Mysal üçin, haýwanat bagymyzy dörederis - zebra:
public class Zoo {
   class Zebra {
       public void toFeed(String food) {
           System.out.println("Дать зебре - " + food);
       }
   }
}
Çylşyrymly zat ýok, şeýlemi? Içerki synp obýektini döretmegiň mysalyna göz aýlalyň:
Zoo.Zebra zebra = new Zoo().new Zebra();
zebra.toFeed("яблоко");
Öň görşüňiz ýaly, içerki synpyň obýektini döredip boljak salgylanma esasynda çarçuwaly synpyň obýektini döretmek hökmandyr. Şeýle hem, içerki synpyň statiki usullary ýa-da statiki meýdanlary bolup bilmejekdigini belläsim gelýär . Sebäbi içki synp daşarky synpyň obýekti bilen doly baglanyşyklydyr we içindäki statiki usullary yglan edip bilmez. 2. Statik höwürtgelenen synplar Bu synp öňki synpyna meňzeýär, diňe synp deklarasiýasynyň ýanynda statiki giriş modifikatory bar. Bu görnüşdäki synpyň daşarky synpyň statiki däl meýdanlaryna girip bilmeýändigi sebäpli, içki synpdan has daşarky synpyň statiki bölegine meňzeýär. Bu ýagdaýda synp maglumatlary daşarky synpyň ähli statiki agzalaryna, hatda hususy adamlara-da girip biler. Statik höwürtge synpynyň mysaly:
public class Zoo {
   static class Zebra {
       public void toFeed(String food) {
           System.out.println("Дать зебре - " + food);
       }
   }
}
Dörediş usuly öňküsinden birneme tapawutlanýar:
Zoo.Zebra zebra = new Zoo.Zebra();
zebra.toFeed("яблоко");
Bu ýerde içerki statik synpyň obýektini döretmek üçin daşarky synpyň obýekti gerek däl. Daşarky synpdan, höwürtgelenen synpyň ýerleşýän ýerini tapmak üçin diňe onuň görnüşi gerek. 3. classeserli synplar classerli synplar bir usulyň içinde yglan edilen synplardyr we ýerli synpyň obýektini döretmek we ulanmak diňe şu usulyň çäginde mümkindir. Mysal:
public class Zoo {
   public void toFeed(String animal, String food) {
       switch(animal){
           case "зебра":
               class Zebra {
                   void toFeedZebra(String food) {
                       System.out.println("Дать зебре - " + food);
                   }
               }
               Zebra zebra = new Zebra();
               zebra.toFeedZebra(food);
               ...
Ulanylyş mysaly:
Zoo zoo = new Zoo();
zoo.toFeed("зебра", "яблоко");
“ToFeed” usulynyň koduny görmän , ýerli synpyň bardygyna-da şübhelenmersiňiz, şeýlemi? Classerli synp statik ýa-da wagtlaýyn bolup bilmez, ýöne abstrakt ýa-da gutarnykly hökmünde bellik edilip bilner (diňe OR, sebäbi bu iki üýtgedijini ulanmak gapma-garşylyga sebäp bolar). 4. Anonim synplar aboveokardaky anonim synplar hakda eýýäm gürleşipdik we ýadyňyzda bolsa, iki çeşmeden - interfeýslerden we synplardan döredilip bilner. Içerki statiki we statik däl synplary ulanmagyň sebäpleri ulanylýar, sebäbi käwagt kiçi synplary has uly synplaryň içine salmak we olary bilelikde saklamak has gowudyr: şeýlelik bilen has ýokary jebislik we umumy maksat bolar. Aslynda, höwürtgelenen synplaryň ulanylmagy kod kodlamasyny ýokarlandyrýar. Classeserli synplary saýlamagyň sebäbi, berlen synpyň diňe bir usulyň içinde ulanylmagy bolup biler. Bu ýagdaýda kody programmanyň hemme ýerine ýaýratmak zerurmy? No.ok. Theöne şol bir wagtyň özünde, iş ýüzünde ýerli synplaryň ulanylyşyny görmändigimi goşaryn, sebäbi zerurlygy gaty jedelli. Dogrusy, anonim synplary ulanmagyň sebäbi interfeýsiň ýa-da abstrakt synpyň belli bir ýerine ýetirilmeginiň diňe bir gezek zerur bolmagy bolup biler, şonuň üçin munuň üçin durmuşa geçirilmegi bilen aýratyn, doly hukukly synp döretmegiň zerurlygy ýok. Muňa derek, ýönekeý bir usul bilen, näbelli synpyň üsti bilen zerur usullary (usullary) durmuşa geçirdik, bu obýekti ulandyk we ýatdan çykardyk (zibil ýygnaýjy bu hakda ýadyna düşdi). Bu we buJava dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  5-nji bölüm makala içerki sapaklary has jikme-jik öwrenmäge kömek eder .

51. Bir synpda haýsy giriş üýtgedijileri bolup biler?

Rememberadymyzda bolsa, dürli synplar bar we olara dürli giriş üýtgedijileri ulanylýar:
  • daşarky synp giriş modifikatoryny köpçülige açyp biler ýa-da üýtgedijisiz (deslapky üýtgediji) bolup biler;
  • içki synp ähli 4 giriş üýtgedijisini goldaýar;
  • ýerleşdirilen statiki synp, goralýanlardan başga ähli giriş üýtgedijilerini goldaýar , sebäbi bu üýtgediji synpyň statiki agzasyna ters gelýän mirasy aňladýar (statiki elementler miras galmaýar);
  • ýerli synpda diňe bir üýtgediji bolup biler (ýagny asla üýtgediji ýok);
  • anonim synp : synp görnüşi deklarasiýasy ýok bolsa, asla giriş üýtgedijileri ýok.
Ine, şu gün durarys. Görüşýänçäk!Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi.  5-nji bölüm
Tapgyryň beýleki materiallary:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION