JavaRush /Java Blog /Random-TK /Iň gowy 50 Java sorag soraglary we jogaplary. 1-nji bölüm...

Iň gowy 50 Java sorag soraglary we jogaplary. 1-nji bölüm

Toparda çap edildi
Hemmelere salam, hanymlar we jenaplar Programma in Engineenerleri! Söhbetdeşlik soraglary barada gürleşeliň. Nämä taýynlanmalydygyňyzy we bilmeli zatlaryňyz hakda. Bu nokatlary noldan gaýtalamak ýa-da öwrenmek üçin ajaýyp sebäpdir. Iň gowy 50 Java sorag soraglary we jogaplary.  1-nji bölümOOP, Java Sintaksis, Java-da kadadan çykmalar, kolleksiýalar we köp okamak hakda ýygy-ýygydan soralýan soraglaryň gaty giň toplumy bar, amatly bolar ýaly birnäçe bölege bölýärin. Üns beriň:diňe 8-e çenli Java wersiýalary barada gürleşeris, 9, 10, 11, 12, 13-den başlap ähli täzelikler bu ýerde hasaba alynmaz. Jogaplary nädip gowulandyrmalydygy barada islendik pikir / teswir kabul edilýär . Okanyňyz gutly bolsun, gideli!

Java söhbetdeşligi: OOP soraglary

1. Java-da haýsy aýratynlyklar bar?

Jogap:
  1. OOP düşünjeleri:

    1. obýektiň ugry;
    2. miras;
    3. encapsulation;
    4. polimorfizm;
    5. abstraksiýa.
  2. Çyzgyly platforma: Java programmasy islendik üýtgetmesiz islendik platformada işledilip bilner. Size ýeke-täk zat gurnalan JVM (java wirtual maşyn).

  3. Performanceokary öndürijilik: JIT (Just In Time compiler) ýokary öndürijilige mümkinçilik berýär. JIT bytekody maşyn kodyna öwürýär we JVM ýerine ýetirip başlaýar.

  4. Köp okamak: belli bolan ýerine ýetiriş sapagy Thread. JVM atly sapak döredýär main thread. Programmist, sapak synpyndan miras almak ýa-da interfeýs arkaly birnäçe sapak döredip biler Runnable.

2. Miras näme?

Miras, bir synpyň başga bir synpy miras alyp biljekdigini aňladýar (“ giňeldýär ”). Şeýlelik bilen, miras alýan synpyňyzdan kod ulanyp bilersiňiz. superclassBar bolan synp , bilinýän ýaly bilinýär subclass. Şeýle hem aýdýarlar parentwe child.
public class Animal {
   private int age;
}

public class Dog extends Animal {

}
nirede Animalwe - . parent_Dogchild

3. Gaplamak näme?

Bu sorag köplenç Java dörediji söhbetdeşliklerinde ýüze çykýar. Enkapsulýasiýa giriş üýtgeýjilerini, getterleri we sazlaýjylary ulanyp, durmuşa geçirmegi gizleýär. Bu, işläp düzüjileriň zerur hasaplaýan ýerlerinde daşarky ulanmak üçin girişi ýapmak üçin edilýär. Durmuşdan elýeterli mysal awtoulagdyr. Motoryň işleýşine gönüden-göni girip bilmeris. Biziň üçin iş açary otlamak we motory açmak. Kapotyň aşagynda haýsy prosesler amala aşyrylar, bu biziň işimiz däl. Mundan başga-da, bu işe gatyşmagymyz garaşylmadyk ýagdaýa getirip biler, bu sebäpli maşyny döwüp, özümize zyýan berip bileris. Programmirlemekde edil şol bir zat bolýar. Wikipediýada gowy suratlandyryldy . JavaRush- da encapsulation hakda makala hem bar .

4. Polimorfizm näme?

Polimorfizm , programmanyň şol obýektiň belli bir görnüşi barada maglumat bolmazdan, şol bir interfeýsli obýektleri birmeňzeş ulanmak ukybydyr. Olaryň aýdyşy ýaly, bir interfeýs - köp ýerine ýetiriş. Polimorfizm bilen, umumy häsiýetlerine esaslanyp dürli görnüşli zatlary birleşdirip we ulanyp bilersiňiz. Mysal üçin, iki nesli bolan It we Pişik bolan Haýwan synpymyz bar. Umumy haýwanlar synpy hemmeler üçin umumy häsiýetdir - ses çykarmak. Haýwanlar synpynyň ähli nesillerini bir ýere jemläp, “ses çykarmak” usulyny ýerine ýetirmeli bolanymyzda, polimorfizmiň mümkinçiliklerinden peýdalanýarys. Görnüşi ýaly:
List<Animal> animals = Arrays.asList(new Cat(), new Dog(), new Cat());
animals.forEach(animal -> animal.makeSound());
Şonuň üçin polimorfizm bize kömek edýär. Mundan başga-da, bu polimorf (aşa ýüklenen) usullara-da degişlidir. Polimorfizmi ulanmagyň amaly

Söhbetdeşlik soraglary - Java sintaksis

5. Java-da konstruktor näme?

Aşakdaky aýratynlyklar dogry:
  1. Täze obýekt döredilende, programma munuň üçin degişli konstruktory ulanýar.
  2. Konstruktor usul ýalydyr. Onuň aýratynlygy, gaýdyp gelýän elementiň ýoklugy (boşlugy hem goşmak bilen) we ady synpyň ady bilen deňdir.
  3. Hiç bir konstruktor aç-açan ýazylmasa, boş konstruktor awtomatiki usulda dörediler.
  4. Konstruktoryň üstünden ýazylyp bilner.
  5. Parametrleri bolan konstruktor döredilen bolsa, ýöne parametrlersiz zerur bolsa, awtomatiki usulda döredilmänsoň, aýratyn ýazylmalydyr.

6. Haýsy iki synp Obýektden miras almaýar?

Prowokasiýa bilen aldanmaň, beýle synplar ýok: ähli synplar gönüden-göni ýa-da ata-babalaryň üsti bilen Obýekt synpyndan miras galypdyr!

7. Localerli üýtgeýän näme?

Java dörediji bilen geçirilen söhbetdeşlik wagtynda başga bir meşhur sorag. Localerli üýtgeýji, usulyň içinde kesgitlenýän we usul ýerine ýetirilýänçä bar bolan üýtgeýjidir. Executionerine ýetiriş gutaransoň, ýerli üýtgeýji ýok bolar. Ine, esasy () usulynda helloMessage ýerli üýtgeýjisini ulanýan programma:
public static void main(String[] args) {
   String helloMessage;
   helloMessage = "Hello, World!";
   System.out.println(helloMessage);
}

8. Instant üýtgeýän näme?

Instant üýtgeýjisi, synpyň içinde kesgitlenýän üýtgeýjidir we obýekt bar bolýança bar. Mysal üçin iki üýtgeýän nektarCapacity we maxNectarCapacity bolan ary synpy:
public class Bee {

   /**
    * Current nectar capacity
    */
   private double nectarCapacity;

   /**
    * Maximal nectar that can take bee.
    */
   private double maxNectarCapacity = 20.0;

  ...
}

9. Giriş üýtgedijileri näme?

Giriş üýtgedijileri synplara, usullara we üýtgeýänlere girişi sazlamaga mümkinçilik berýän guraldyr. Giriş mümkinçiligini artdyrmak üçin sargyt edilen aşakdaky üýtgedijiler bar:
  1. private- usullar, meýdanlar we konstruktorlar üçin ulanylýar. Giriş derejesi diňe yglan edilen synpdyr.
  2. package-private(default)- sapaklar üçin ulanylyp bilner. Diňe synp, usul, üýtgeýän, konstruktor yglan edilen belli bir bukjada giriň.
  3. protectedpackage-private- üýtgediji bilen bir synpdan miras galan synplar üçin + bilen deň giriş protected.
  4. public- sapaklar üçin hem ulanylýar. Applicationhli programma boýunça doly giriş.
  5. Iň gowy 50 Java sorag soraglary we jogaplary.  1-nji bölüm

10. Artykmaç usullar näme?

Usul artykmaçlygy çaga ene-atasynyň özüni alyp barşyny üýtgetmek islän mahaly ýüze çykýar. Ene-atanyň usulyndaky zatlary ýerine ýetirmeli bolsaňyz, çagaňyzda super.methodName () ýaly gurluşy ulanyp bilersiňiz, bu ene-atanyň usulyny ýerine ýetirer we diňe logika goşar. Beerine ýetirilmeli talaplar:
  • usulyň goly birmeňzeş bolmaly;
  • yzyna gaýtarmak bahasy birmeňzeş bolmaly.

11. Usul goly näme?

Iň gowy 50 Java sorag soraglary we jogaplary.  1-nji bölümUsul goly, usulyň adynyň we usulyň kabul edýän argumentleriniň toplumydyr. Usul goly, aşa köp ýüklenende usul üçin özboluşly kesgitleýji.

12. Artykmaç usul näme?

Usuly artykmaç ýüklemek polimorfizmiň häsiýetidir, onda usulyň goluny üýtgedip, şol bir hereketler üçin dürli usullary döredip bilersiňiz:
  • şol bir usulyň ady;
  • dürli argumentler;
  • başga bir gaýdyp geliş görnüşi bolup biler.
Mysal üçin, şuňa meňzeş add()zatlary ArrayListaşa köp ýükläp bolýar we gelýän argumentlere baglylykda goşmaçany başgaça ýerine ýetirer:
  • add(Object o)- diňe bir obýekt goşýar;
  • add(int index, Object o)- belli bir görkezijä obýekt goşýar;
  • add(Collection<Object> c)- obýektleriň sanawyny goşýar;
  • add(int index, Collection<Object> c)- belli bir indeksden başlap obýektleriň sanawyny goşýar.

13. Interfeýs näme?

Java-da birnäçe miras amala aşyrylmaýar, şonuň üçin bu meseläni ýeňip geçmek üçin interfeýsler goşuldy;) Uzak wagtlap interfeýslerde diňe durmuşa geçirilmezden usullar bardy. Bu jogabyň bir bölegi hökmünde, olar hakda gürleşeris. Mysal üçin:

public interface Animal {
   void makeSound();
   void eat();
   void sleep();
}
Käbir nuanslar şundan gelýär:
  • interfeýsdäki ähli usullar köpçülige we abstrakt;
  • ähli üýtgeýjiler umumy statiki jemleýji;
  • synplar miras almaýarlar (giňeldýärler), ýöne durmuşa geçirýärler (durmuşa geçirýärler). Mundan başga-da, isleýşiňiz ýaly köp interfeýsi durmuşa geçirip bilersiňiz.
  • interfeýsi amala aşyrýan synplar, interfeýsdäki ähli usullaryň durmuşa geçirilmegini üpjün etmeli.
Şuňa meňzeş:
public class Cat implements Animal {
   public void makeSound() {
       // method implementation
   }

   public void eat() {
       // implementation
   }

   public void sleep() {
       // implementation
   }
}

14. Interfeýsde deslapky usul näme?

Indi asyl usullar barada gürleşeliň. Näme üçin, kim üçin? Bu usullar hemme zady “siziňki we biziňki” etmek üçin goşuldy. Men näme hakda gürleşýärin? Hawa, bir tarapdan täze funksiýa goşmalydy: lambdas, Stream API, beýleki tarapdan, Java-yň meşhur bolan zadyny - yza gabat gelmegi goýmalydy. Munuň üçin interfeýslere taýýar çözgütleri girizmek zerur boldy. Ine, adaty usullar bize geldi. .Agny, deslapky usul açar sözi bolan interfeýsde ýerine ýetirilen usuldyr default. Mysal üçin, belli stream()usul Collection. Barlap görüň, bu interfeýs görünişi ýaly ýönekeý däl;). forEach()Ora-da deň derejede belli usul Iterable. Şeýle hem, adaty usullar goşulýança ýokdy. Theeri gelende aýtsak, bu hakda JavaRush- da okap bilersiňiz .

15. Onda iki sany birmeňzeş usuly nädip miras almaly?

Adaty usulyň nämedigi baradaky öňki jogaba esaslanyp, başga bir sorag berip bilersiňiz. Usullary interfeýslerde durmuşa geçirip bilýän bolsaňyz, teoretiki taýdan şol bir usul bilen iki interfeýsi durmuşa geçirip bilersiňiz we muny nädip etmeli? Bir usul bilen iki dürli interfeýs bar:
interface A {
   default void foo() {
       System.out.println("Foo A");
   }
}

interface B {
   default void foo() {
       System.out.println("Foo B");
   }
}
Bu iki interfeýsi amala aşyrýan bir synp bar. foo()Näbelliligiň öňüni almak we kody düzmek üçin synpdaky usuly ýok etmeli we diňe interfeýsleriň haýsydyr biriniň Cusulyny atlandyryp bileris - ýa-da . Justöne belli bir interfeýs usulyny nädip saýlamaly ýa-da ? Munuň ýaly gurluş bar : foo()ABАВA.super.foo()
public class C implements A, B {
   @Override
   public void foo() {
       A.super.foo();
   }
}
ýa-da:
public class C implements A, B {
   @Override
   public void foo() {
       B.super.foo();
   }
}
Şeýlelik bilen, foo()synp usuly interfeýsden deslapky usuly ýa-da interfeýs usulyny Culanar . foo()Afoo()B

16. Abstrakt usullar we synplar näme?

abstractJava-da abstrakt synplary we usullary aňlatmak üçin ulanylýan ätiýaçlyk söz bar . Birinjiden, käbir kesgitlemeler. abstractAbstrakt usul, abstrakt synpda açar söz bilen ýerine ýetirilmezden döredilen usul . .Agny, bu interfeýsdäki ýaly usul, diňe açar söz goşmak bilen, mysal üçin:
public abstract void foo();
abstractAbstrakt synp, şeýle hem sözi bolan synpdyr :
public abstract class A {

}
Abstrakt synpyň birnäçe aýratynlygy bar:
  • esasynda bir obýekt döredilip bilinmez;
  • abstrakt usullary bolup biler;
  • abstrakt usullary bolmazlygy mümkin.
Abstrakt sapaklar hakyky durmuşda ýok, ýöne köp umumy häsiýetleri we ýagdaýlary (ýagny usullar we üýtgeýjiler) öz içine alýan abstraksiýany (tautologiýa üçin bagyşlaň) umumylaşdyrmak üçin zerurdyr. Durmuşdan ýeterlik mysallar bar. Hemme zat töweregimizde. "Haýwan", "awtoulag", "geometrik şekil" we ş.m. bolup biler.

17. Setir, setir gurluşykçysy we setir buferiniň arasynda näme tapawut bar?

Gymmatlyklar Stringyzygiderli simli howuzda saklanýar. Bir hatar döredilenden soň, bu howuzda peýda bolar. Ony pozmak mümkin bolmaz. Mysal üçin:
String name = "book";
... üýtgeýji setir basseýnine salgylanar Üznüksiz setir howzy Iň gowy 50 Java sorag soraglary we jogaplary.  1-nji bölüm Üýtgeýjiniň adyny başga bir baha goýsaňyz, aşakdakylary alarsyňyz:
name = "pen";
Yzygiderli setir howuz Iň gowy 50 Java sorag soraglary we jogaplary.  1-nji bölümŞonuň üçin bu iki baha şol ýerde galar. Setir buferi:
  • bahalar Stringstakada saklanýar. Bahasy üýtgedilse, täze baha köne bilen çalşyrylar;
  • String Buffersinhronlaşdyrylan we şonuň üçin sapak howpsuz;
  • Threadüpüň howpsuzlygy sebäpli, iş tizligi köp islenýär.
Mysal:
StringBuffer name = "book";
Iň gowy 50 Java sorag soraglary we jogaplary.  1-nji bölümAdyň gymmaty üýtgän badyna, stakanyň bahasy üýtgeýär: Iň gowy 50 Java sorag soraglary we jogaplary.  1-7-nji bölümStringBuilder Edil şol bir zat StringBuffer, diňe sapak howpsuz däl. Şonuň üçin onuň tizligi öňküsinden has ýokarydyr StringBuffer.

18. Abstrakt synp bilen interfeýsiň arasynda näme tapawut bar?

Abstrakt synp:
  • abstrakt synplarda deslapky konstruktor bar; bu abstrakt synpyň çagasy her gezek döredilende diýilýär;
  • abstrakt we abstrakt däl usullary öz içine alýar. Umuman aýdanyňda, abstrakt usullary öz içine alyp bilmez, ýöne abstrakt synp bolup biler;
  • abstraktdan miras galan synp diňe abstrakt usullary durmuşa geçirmeli;
  • abstrakt synpda dessine üýtgeýji bolup biler (5-nji soraga serediň).
Interfeýs:
  • konstruktory ýok we başlap bolmaz;
  • diňe abstrakt usullar goşulmalydyr (deslapky usullary hasaba almazdan);
  • interfeýsi amala aşyrýan synplar ähli usullary durmuşa geçirmeli (deslapky usullary hasaba almazdan);
  • interfeýslerde diňe yzygiderlilik bolup biler.

19. Näme üçin bir massiwdäki elemente girmek O (1) alýar?

Bu sorag sözüň doly manysynda soňky söhbetdeşlikden. Soň öwrenişim ýaly, bu sorag adamyň nähili pikir edýändigini görmek üçin berilýär. Bu bilimde amaly manylaryň azdygy düşnüklidir: diňe bu hakykaty bilmek ýeterlikdir. Ilki bilen, O (1) amalyň hemişe ýerine ýetirilende algoritmiň wagt çylşyrymlylygy üçin bellikdigini aýdyňlaşdyrmalydyrys . .Agny, bu bellik iň çalt ýerine ýetirilişdir. Bu soraga jogap bermek üçin, massiwler hakda bilýänlerimize düşünmeli? Bir massiw döretmek üçin intaşakdakylary ýazmalydyrys:
int[] intArray = new int[100];
Bu ýazgydan birnäçe netije çykaryp bolar:
  1. Bir massiw döredilende onuň görnüşi belli bolýar. Görnüşi belli bolsa, massiwiň her öýjüginiň haýsy ululykda boljakdygy belli bolýar.
  2. Bu massiwiň ululygy belli.
Munuň netijesi: haýsy öýjüge ýazmalydygyna düşünmek üçin diňe haýsy ýat meýdanyna ýazmalydygyny hasaplamaly. Awtoulag üçin bu aňsat däldi. Enjamda bölünen ýadyň başlangyjy, birnäçe element we bir öýjük ululygy bar. Mundan, ýazgy meýdanynyň massiwiň başlangyç ýerine + ululygyna köpeldilen öýjügiň ululygyna deň boljakdygy aýdyňdyr.

ArrayList-de obýektlere girmek üçin O (1) nädip almaly?

Bu sorag derrew öňki soraga eýerýär. Bir massiw bilen işlänimizde we ol ýerde ilkinjiler bar bolsa, bu görnüşiň döredilende ululygynyň nämedigini öňünden bilýäris. Theöne suratdaky ýaly shema bar bolsa näme etmeli: Iň gowy 50 Java sorag soraglary we jogaplary.  1-nji bölümwe A görnüşli elementler bilen kolleksiýa döretmek we dürli amallary goşmak isleýäris - B, C, D:
List<A> list = new ArrayList();
list.add(new B());
list.add(new C());
list.add(new D());
list.add(new B());
Bu ýagdaýda her öýjügiň ululygyna nädip düşünip bilersiňiz, sebäbi her bir obýekt üýtgeşik bolar we dürli goşmaça meýdanlar bolup biler (ýa-da düýbünden başgaça). Näme etmeli? Bu ýerde sorag bulaşdyrmak we bulaşdyrmak ýaly görnüşde berilýär. Aslynda kolleksiýanyň obýektleri saklamaýandygyny, diňe bu zatlara baglanyşykdygyny bilýäris. Linkshli baglanyşyklaryň ululygy birmeňzeş we belli. Şonuň üçin bu ýerdäki ýeri sanamak öňki soragdaky ýaly işleýär.

21. Awtobokslamak we gutusyny açmak

Taryhy fon: awtobokslamak we awto-boks JDK 5-iň esasy täzeliklerinden biridir. Awtobokslamak, başlangyç görnüşden degişli örtük synpyna awtomatiki öwrülişdir. Awtomatik gutulmak - awto-boksyň tersini edýär - örtük synpyny başlangyç görnüşe öwürýär. Aöne örtük bahasy bar bolsa null, gaplamak wagtynda kadadan çykma bolar NullPointerException.

Ilkinji gabat gelýän - örtük

Ilkinji Wrapper synpy
boolean Boolean
int Bitewi
baýt Baýt
char Nyşan
ýüzmek Float
uzyn Uzyn
gysga Gysga
goşa Iki gezek

Awtomatiki usulda ýüze çykýar:

  • örtük synpyna başlangyç salgylanma berlende:

    Java 5-den öň:

    //manual packaging or how it was BEFORE Java 5.
    public void boxingBeforeJava5() {
       Boolean booleanBox = new Boolean(true);
       Integer intBox = new Integer(3);
       // and so on to other types
    }
    
    после Java 5:
    //automatic packaging or how it became in Java 5.
    public void boxingJava5() {
       Boolean booleanBox = true;
       Integer intBox = 3;
       // and so on to other types
    }
  • örtügine garaşýan usula argument hökmünde başlangyç geçende:

    public void exampleOfAutoboxing() {
       long age = 3;
       setAge(age);
    }
    
    public void setAge(Long age) {
       this.age = age;
    }

Awtomatik açmak bolýar:

  • örtük synpyna başlangyç üýtgeýjini bellänimizde:

    //before Java 5:
    int intValue = new Integer(4).intValue();
    double doubleValue = new Double(2.3).doubleValue();
    char c = new Character((char) 3).charValue();
    boolean b = Boolean.TRUE.booleanValue();
    
    //and after JDK 5:
    int intValue = new Integer(4);
    double doubleValue = new Double(2.3);
    char c = new Character((char) 3);
    boolean b = Boolean.TRUE;
  • Arifmetiki amallar bolan ýagdaýlarda. Olar diňe başlangyç görnüşlere degişlidir, munuň üçin primitiwlere gutulmak gerek.

    // Before Java 5
    Integer integerBox1 = new Integer(1);
    Integer integerBox2 = new Integer(2);
    
    // for comparison it was necessary to do this:
    integerBox1.intValue() > integerBox2.intValue()
    
    //в Java 5
    integerBox1 > integerBox2
  • degişli primitiwi kabul edýän usul bilen örtüge geçirilende:

    public void exampleOfAutoboxing() {
       Long age = new Long(3);
       setAge(age);
    }
    
    public void setAge(long age) {
       this.age = age;
    }

22. Iň soňky açar söz näme we ony nirede ulanmaly?

Açar söz finalüýtgeýjiler, usullar we synplar üçin ulanylyp bilner.
  1. Soňky üýtgeýjini başga bir obýekte geçirip bolmaz.
  2. jemleýji synp steril)) mirasdüşerleri bolup bilmez.
  3. gutarnykly usuly ata-babanyň üstünden ýazyp bolmaz.
Üstüni ýapdyk, indi has jikme-jik ara alyp maslahatlaşalyň.

soňky üýtgeýjiler

; Java üýtgeýjini döretmek we oňa belli bir baha bermek üçin bize iki ýol berýär:
  1. Üýtgeýjini yglan edip, soň başlap bilersiňiz.
  2. Üýtgeýjini yglan edip, derrew belläp bilersiňiz.
Bu ýagdaýlar üçin soňky üýtgeýjini ulanmagyň mysaly:
public class FinalExample {

   //final static variable, which is immediately initialized:
   final static String FINAL_EXAMPLE_NAME = "I'm likely final one";

   //final is a variable that is not initialized, but will only work if
   //initialize this in the constructor:
   final long creationTime;

   public FinalExample() {
       this.creationTime = System.currentTimeMillis();
   }

   public static void main(String[] args) {
       FinalExample finalExample = new FinalExample();
       System.out.println(finalExample.creationTime);

       // final field FinalExample.FINAL_EXAMPLE_NAME cannot be assigned
//    FinalExample.FINAL_EXAMPLE_NAME = "Not you're not!";

       // final field Config.creationTime cannot be assigned
//    finalExample.creationTime = 1L;
   }
}

Jemleýji üýtgeýjini hemişelik hasaplap bolarmy?

Soňky üýtgeýjä täze baha belläp bilmejekdigimiz sebäpli, bular hemişelik üýtgeýänler ýaly. Thisöne bu diňe ilkinji seredişde. Üýtgeýjiniň maglumat görnüşi bolsa immutable, hawa, hemişelik. Emma maglumatlaryň görnüşi mutableüýtgeýän bolsa, usullary we üýtgeýjileri ulanyp, üýtgeýjiniň görkezýän obýektiniň bahasyny üýtgedip bolar finalwe bu ýagdaýda hemişelik diýip bolmaz. Şeýlelikde, mysal soňky üýtgeýänleriň käbiri hakykatdanam üýtgewsizdigini görkezýär, ýöne käbirleri ýok we üýtgedilip bilner.
public class FinalExample {

   //immutable final variables:
   final static String FINAL_EXAMPLE_NAME = "I'm likely final one";
   final static Integer FINAL_EXAMPLE_COUNT  = 10;

   // mutable filter variables
   final List<String> addresses = new ArrayList();
   final StringBuilder finalStringBuilder = new StringBuilder("constant?");
}

Finalerli jemleýji üýtgeýjiler

finalUsulyň içinde üýtgeýji döredilende, oňa üýtgeýji local finaldiýilýär:
public class FinalExample {

   public static void main(String[] args) {
       // This is how you can
       final int minAgeForDriveCar = 18;

       // or you can do it this way, in the foreach loop:
       for (final String arg : args) {
           System.out.println(arg);
       }
   }

}
finalAçar sözi giňeldilen aýlawda ulanyp bileris for, sebäbi aýlawyň gaýtalanmagy tamamlanandan soň forher gezek täze üýtgeýji döredilýär. Emma bu aýlaw üçin adaty bir zat üçin ulanylmaýar, şonuň üçin aşakdaky kody düzmek üçin ýalňyşlyk goýberer.
// final local changed j cannot be assigned
for (final int i = 0; i < args.length; i ++) {
   System.out.println(args[i]);
}

Jemleýji synp

Declaredaly yglan edilen synpy uzaldyp bilmersiňiz final. Plyönekeý söz bilen aýdylanda, hiç bir synp bu synpdan miras alyp bilmez. finalJDK-da synpyň ajaýyp mysaly String. finalÜýtgemez synp döretmek üçin ilkinji ädim , ony uzaldyp bolmaz ýaly bellemekdir :
public final class FinalExample {
}

// Compilation error here
class WantsToInheritFinalClass extends FinalExample {
}

Jemleýji usullar

Haçan-da bir usul gutarnykly bellenilse, oňa soňky usul diýilýär (logiki, şeýlemi?). Jemleýji usuly nesil synpynda ýok edip bolmaz. Theeri gelende aýtsak, Obýekt synpyndaky usullar - garaşyň () we habar beriň () - gutarnykly, şonuň üçin olary ýok etmek mümkinçiligimiz ýok.
public class FinalExample {
   public final String generateAddress() {
       return "Some address";
   }
}

class ChildOfFinalExample extends FinalExample {

   // compile error here
   @Override
   public String generateAddress() {
       return "My OWN Address";
   }
}

Java-da finaly nädip we nirede ulanmaly

  • käbir synp derejesindäki yzygiderliligi kesgitlemek üçin iň soňky açar sözden peýdalanyň;
  • obýektleriň üýtgedilmegini islemeýän wagtyňyzda soňky üýtgeýjileri dörediň. Mysal üçin, hasaba alyş maksatlary üçin ulanyp boljak obýektlere mahsus aýratynlyklar;
  • synpyň uzaldylmagyny islemeýän bolsaňyz, ony gutarnykly diýip belläň;
  • üýtgewsiz <synp döretmeli bolsa, ony gutarnykly etmeli;
  • usulyň durmuşa geçirilmegini onuň nesillerinde üýtgetmezlik isleseňiz, usuly şeýle kesgitläň final. Bu ýerine ýetirilişiň üýtgemezligini üpjün etmek üçin örän möhümdir.

23. Üýtgedip bolmajak näme?

Üýtgeýän

Üýtgeýän zatlar, ýagdaýlar we üýtgeýjiler döredilenden soň üýtgedilip bilinýän obýektlerdir. Mysal üçin, StringBuilder, StringBuffer ýaly sapaklar. Mysal:
public class MutableExample {

   private String address;

   public MutableExample(String address) {
       this.address = address;
   }

   public String getAddress() {
       return address;
   }

   // this setter can change the name field
   public void setAddress(String address) {
       this.address = address;
   }

   public static void main(String[] args) {

       MutableExample obj = new MutableExample("first address");
       System.out.println(obj.getAddress());

       // update the name field, so this is a mutable object
       obj.setAddress("Updated address");
       System.out.println(obj.getAddress());
   }
}

Üýtgemez

Üýtgemeýän zatlar, obýekt döredilenden soň ýagdaýy we üýtgeýjileri üýtgedilip bilinmeýän zatlardyr. Näme üçin HashMap üçin ajaýyp açar däl, şeýlemi?) Mysal üçin, Setir, Integer, Double we ş.m. Mysal:
// make this class final so no one can change it
public final class ImmutableExample {

   private String address;

   ImmutableExample (String address) {
       this.address = address;
   }

   public String getAddress() {
       return address;
   }

   //remove the setter

   public static void main(String[] args) {

       ImmutableExample obj = new ImmutableExample("old address");
       System.out.println(obj.getAddress());

       // Therefore, do not change this field in any way, so this is an immutable object
       // obj.setName("new address");
       // System.out.println(obj.getName());

   }
}

24. Üýtgemeýän synpy nädip ýazmaly?

Üýtgeýän we üýtgemeýän zatlaryň nämedigine göz ýetireniňizden soň, indiki sorag tebigy - ony nädip ýazmaly? Üýtgemez synpy ýazmak üçin ýönekeý ädimleri ýerine ýetirmeli:
  • synpy jemläň.
  • ähli meýdanlary şahsylaşdyryň we olar üçin diňe girdeji alyň. Elbetde, sazlaýjylar hökman däl.
  • Bahasy diňe bir gezek kesgitlenip bilner ýaly, üýtgeýän meýdanlaryň hemmesini jemläň.
  • çuňňur göçürmäni ýerine ýetirip, konstruktoryň üsti bilen ähli meýdanlary başlaň (ýagny obýektiň özüni, üýtgeýänlerini, üýtgeýänleriň üýtgeýänlerini we ş.m.)
  • klonlarda üýtgeýän üýtgeýän obýektler, hakyky obýektlere salgylanmalar däl-de, diňe bahalaryň nusgalaryny yzyna gaýtarmak üçin.
Mysal:
/**
* An example of creating an immutable object.
*/
public final class FinalClassExample {

   private final int age;

   private final String name;

   private final HashMap<String, String> addresses;

   public int getAge() {
       return age;
   }


   public String getName() {
       return name;
   }

   /**
    * Clone the object before returning it.
    */
   public HashMap<String, String> getAddresses() {
       return (HashMap<String, String>) addresses.clone();
   }

   /**
    * In the constructor, deep copy the mutable objects.
    */
   public FinalClassExample(int age, String name, HashMap<String, String> addresses) {
       System.out.println("Performing a deep copy in the constructor");
       this.age = age;
       this.name = name;
       HashMap<String, String> temporaryMap = new HashMap<>();
       String key;
       Iterator<String> iterator = addresses.keySet().iterator();
       while (iterator.hasNext()) {
           key = iterator.next();
           temporaryMap.put(key, addresses.get(key));
       }
       this.addresses = temporaryMap;
   }
}
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION