JavaRush /Blog Jawa /Random-JV /Top 50 Pitakonan Wawancara Inti Jawa lan Jawaban. Bagean ...

Top 50 Pitakonan Wawancara Inti Jawa lan Jawaban. Bagean 1

Diterbitake ing grup
Hello everyone, Ladies lan gentlemen Software Engineers! Ayo ngomong babagan pitakonan wawancara. Babagan apa sing kudu disiapake lan sampeyan kudu ngerti. Iki minangka alesan sing apik kanggo mbaleni utawa nyinaoni poin kasebut saka awal. Top 50 Pitakonan Wawancara Inti Jawa lan Jawaban.  Bagean 1 - 1Aku duwe koleksi cukup ekstensif pitakonan sing kerep takon babagan OOP, Java Syntax, pangecualian ing Jawa, koleksi lan multithreading, kang kanggo penak aku bakal dibagi dadi sawetara bagéan. penting:kita mung bakal pirembagan bab versi Jawa nganti 8. Kabeh inovasi saka 9, 10, 11, 12, 13 ora bakal dijupuk menyang akun kene. Sembarang gagasan/komentar babagan carane nambah jawaban ditampa . Sugeng maca, ayo!

Wawancara Jawa: Pitakonan OOP

1. Ciri khas Jawa iku apa?

Wangsulan:
  1. Konsep OOP:

    1. orientasi obyek;
    2. pusaka;
    3. enkapsulasi;
    4. polimorfisme;
    5. abstraksi.
  2. Cross-platform: Program Java bisa ditindakake ing platform apa wae tanpa modifikasi. Ing bab mung sampeyan kudu JVM diinstal (Java mesin virtual).

  3. Kinerja dhuwur: JIT (Just In Time compiler) ngidini kinerja dhuwur. JIT ngowahi bytecode menyang kode mesin lan banjur JVM miwiti eksekusi.

  4. Multithreading: Utas eksekusi sing dikenal minangka Thread. JVM nggawe utas sing diarani main thread. Programmer bisa nggawe macem-macem utas kanthi warisan saka kelas Utas utawa kanthi ngleksanakake antarmuka Runnable.

2. Apa sing diarani pusaka?

Warisan tegese siji kelas bisa warisan (" ngluwihi ") kelas liyane. Kanthi cara iki sampeyan bisa nggunakake maneh kode saka kelas sing sampeyan warisake. Kelas sing ana dikenal minangka superclass, lan sing digawe diarani subclass. Padha uga ngomong parentlan child.
public class Animal {
   private int age;
}

public class Dog extends Animal {

}
ngendi Animal, parentlan Dog- child.

3. Apa enkapsulasi?

Pitakonan iki asring muncul nalika wawancara pangembang Jawa. Encapsulation ndhelikake implementasine nggunakake modifiers akses, nggunakake getter lan setter. Iki ditindakake supaya bisa nutup akses kanggo panggunaan eksternal ing papan-papan sing dikarepake para pangembang. Conto sing bisa diakses saka urip yaiku mobil. Kita ora duwe akses langsung menyang operasi mesin. Kanggo kita, tugas kanggo nyelehake kunci ing kontak lan nguripake mesin. Lan proses apa sing bakal ditindakake ing sangisore hood iku dudu urusan kita. Kajaba iku, campur tangan kita ing kegiatan iki bisa nyebabake kahanan sing ora bisa ditebak, amarga kita bisa ngrusak mobil lan cilaka awake dhewe. Persis bab sing padha kedadeyan ing pemrograman. Dijelasake kanthi apik ing Wikipedia . Ana uga artikel babagan enkapsulasi ing JavaRush .

4. Apa polimorfisme?

Polimorfisme minangka kemampuan program kanggo nggunakake obyek kanthi antarmuka sing padha tanpa informasi babagan jinis tartamtu saka obyek kasebut. Nalika padha ngomong, siji antarmuka - akeh implementasine. Kanthi polimorfisme, sampeyan bisa nggabungake lan nggunakake macem-macem jinis obyek adhedhasar prilaku sing umum. Contone, kita duwe kelas Animal, sing duwe loro keturunan - Dog lan Cat. Kelas Animal generik nduweni prilaku umum kanggo kabeh - nggawe swara. Ing kasus nalika kita kudu sijine bebarengan kabeh turunan saka kelas Animal lan nglakokaké "nggawe swara", kita nggunakake kemungkinan polymorphism. Iki bakal katon kaya:
List<Animal> animals = Arrays.asList(new Cat(), new Dog(), new Cat());
animals.forEach(animal -> animal.makeSound());
Dadi polimorfisme mbantu kita. Kajaba iku, iki uga ditrapake kanggo metode polimorfik (overloaded). Praktek nggunakake polimorfisme

Pitakon Wawancara - Sintaksis Jawa

5. Apa sing diarani konstruktor ing basa Jawa?

Karakteristik ing ngisor iki sah:
  1. Nalika obyek anyar digawe, program nggunakake konstruktor cocok kanggo nindakake.
  2. Konstruktor kaya metode. Kekhasane yaiku ora ana unsur bali (kalebu void), lan jenenge padha karo jeneng kelas.
  3. Yen ora ana konstruktor sing ditulis kanthi jelas, konstruktor kosong bakal digawe kanthi otomatis.
  4. Konstruktor bisa diganti.
  5. Yen konstruktor karo paramèter digawe, nanging uga perlu tanpa paramèter, iku kudu ditulis dhewe, awit iku ora digawe kanthi otomatis.

6. Kang loro kelas ora oleh warisan saka Obyek?

Aja diapusi dening provokasi, ora ana kelas kasebut: kabeh kelas langsung utawa liwat leluhur diwarisake saka kelas Obyek!

7. Apa Variabel Lokal?

Pitakonan populer liyane sajrone wawancara pangembang Jawa. Variabel lokal yaiku variabel sing ditetepake ing sajeroning metode lan ana nganti metode kasebut dieksekusi. Sawise eksekusi rampung, variabel lokal bakal ora ana. Iki minangka program sing nggunakake variabel lokal helloMessage ing metode utama ():
public static void main(String[] args) {
   String helloMessage;
   helloMessage = "Hello, World!";
   System.out.println(helloMessage);
}

8. Apa Variabel Instance?

Variabel Instance yaiku variabel sing ditetepake ing njero kelas, lan ana nganti obyek kasebut ana. Conto yaiku kelas Bee, sing nduweni rong variabel nectarCapacity lan maxNectarCapacity:
public class Bee {

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

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

  ...
}

9. Apa sing modifikasi akses?

Modifiers akses minangka alat sing ngidini sampeyan ngatur akses menyang kelas, metode, lan variabel. Ana modifiers ing ngisor iki, supaya bisa nambah akses:
  1. private- digunakake kanggo cara, lapangan lan konstruktor. Tingkat akses mung kelas sing diumumake.
  2. package-private(default)- bisa digunakake kanggo kelas. Akses mung ing paket tartamtu ing ngendi kelas, metode, variabel, konstruktor diumumake.
  3. protected- akses sing padha karo package-private+ kanggo kelas sing diwenehi warisan saka kelas kanthi modifier protected.
  4. public- uga digunakake kanggo kelas. Akses lengkap ing kabeh aplikasi.
  5. Top 50 Pitakonan Wawancara Inti Jawa lan Jawaban.  Bagean 1 - 2

10. Apa metode overriding?

Metode overriding dumadi nalika bocah pengin ngganti prilaku kelas induk. Yen sampeyan pengin apa ing cara tiyang sepah bakal kaleksanan, sampeyan bisa nggunakake construction kaya super.methodName () ing anak, kang bakal nindakake karya saka cara tiyang sepah, lan mung banjur nambah logika. Syarat sing kudu ditindakake:
  • tandha cara kudu padha;
  • Nilai bali kudu padha.

11. Apa sing diarani metode teken?

Top 50 Pitakonan Wawancara Inti Jawa lan Jawaban.  Bagean 1 - 3Tandha metode yaiku sakumpulan jeneng metode lan argumen sing ditampa metode kasebut. Tandha metode minangka pengenal unik kanggo metode nalika overloading metode.

12. Apa metode overloading?

Overloading metode minangka properti polimorfisme sing kanthi ngganti tandha cara, sampeyan bisa nggawe macem-macem cara kanggo tumindak sing padha:
  • jeneng cara sing padha;
  • bantahan beda;
  • bisa uga ana jinis bali sing beda.
Contone, padha add()bisa ArrayListkakehan kaya ing ngisor iki lan bakal nindakake tambahan kanthi cara sing beda, gumantung saka argumen sing mlebu:
  • add(Object o)- mung nambah obyek;
  • add(int index, Object o)- nambah obyek menyang indeks tartamtu;
  • add(Collection<Object> c)- nambah dhaptar obyek;
  • add(int index, Collection<Object> c)- nambah dhaptar obyek, wiwit saka indeks tartamtu.

13. Apa Antarmuka?

Multiple warisan ora dipun ginakaken ing Jawa, supaya kanggo ngatasi masalah iki, antarmuka sing kita ngerti padha ditambahake;) Kanggo dangu, antarmuka mung duwe cara tanpa ngleksanakake. Minangka bagéan saka jawaban iki, kita bakal ngomong babagan. Tuladhane:

public interface Animal {
   void makeSound();
   void eat();
   void sleep();
}
Sawetara nuansa tindakake saka iki:
  • kabeh cara ing antarmuka umum lan abstrak;
  • kabeh variabel minangka final statis umum;
  • kelas ora oleh warisan (ngluwihi), nanging ngleksanakake (implements). Kajaba iku, sampeyan bisa ngleksanakake akeh antarmuka sing dikarepake.
  • kelas sing ngleksanakake antarmuka kudu nyedhiyani implementasine kabeh cara sing antarmuka wis.
Kaya iki:
public class Cat implements Animal {
   public void makeSound() {
       // method implementation
   }

   public void eat() {
       // implementation
   }

   public void sleep() {
       // implementation
   }
}

14. Apa cara standar ing Antarmuka?

Saiki ayo ngomong babagan metode standar. Kanggo apa, kanggo sapa? Cara-cara iki ditambahake kanggo nggawe kabeh "dadi sampeyan lan kita". Aku ngomong apa? Ya, ing tangan siji, perlu kanggo nambah fungsi anyar: lambdas, Stream API, ing tangan liyane, iku perlu kanggo ninggalake apa Jawa misuwur - kompatibilitas mundur. Kanggo nindakake iki, perlu kanggo ngenalake solusi sing wis digawe ing antarmuka. Iki minangka cara standar kanggo kita. Tegese, metode standar minangka metode sing diimplementasikake ing antarmuka sing nduweni tembung kunci default. Contone, cara kondhang stream()ing Collection. Priksa metu, antarmuka iki ora minangka prasaja minangka misale jek;). Utawa uga cara sing padha kondhang forEach()saka Iterable. Uga ora ana nganti cara standar ditambahake. Miturut cara, sampeyan uga bisa maca babagan iki ing JavaRush .

15. Kepiye carane entuk rong cara standar sing padha?

Adhedhasar jawaban sadurunge babagan cara standar, sampeyan bisa takon pitakonan liyane. Yen sampeyan bisa ngleksanakake cara ing antarmuka, banjur miturut teori sampeyan bisa ngleksanakake loro antarmuka karo cara sing padha, lan carane nindakake iki? Ana rong antarmuka sing beda kanthi cara sing padha:
interface A {
   default void foo() {
       System.out.println("Foo A");
   }
}

interface B {
   default void foo() {
       System.out.println("Foo B");
   }
}
Lan ana kelas sing ngleksanakake loro antarmuka iki. Supaya kahanan sing durung mesthi lan kanggo ngumpulake kode, kita kudu ngilangi cara foo()ing kelas C, lan kita mung bisa nelpon cara foo()sembarang antarmuka ing - Autawa B. Nanging mung carane milih cara antarmuka tartamtu Аutawa В? Ana struktur kaya iki kanggo iki A.super.foo():
public class C implements A, B {
   @Override
   public void foo() {
       A.super.foo();
   }
}
utawa:
public class C implements A, B {
   @Override
   public void foo() {
       B.super.foo();
   }
}
Mangkono, cara foo()kelas Cbakal nggunakake salah siji cara standar foo()saka antarmuka Autawa cara foo()saka antarmuka B.

16. Apa metode lan kelas abstrak?

Jawa nduweni tembung cadhangan abstractsing digunakake kanggo nuduhake kelas lan metode abstrak. Kaping pisanan, sawetara definisi. Metode abstrak yaiku metode sing digawe tanpa implementasine kanthi tembung kunci abstracting kelas abstrak. Yaiku, iki minangka cara kaya ing antarmuka, mung kanthi tambahan tembung kunci, contone:
public abstract void foo();
Kelas abstrak yaiku kelas sing uga nduweni abstracttembung:
public abstract class A {

}
Kelas abstrak nduweni sawetara fitur:
  • obyek ora bisa digawe ing basis;
  • bisa duwe cara abstrak;
  • bisa uga ora duwe cara abstrak.
Kelas abstrak dibutuhake kanggo generalisasi sawetara jinis abstraksi (nuwun sewu tautologi), sing ora ana ing urip nyata, nanging ngemot akeh prilaku lan kahanan umum (yaiku metode lan variabel). Ana luwih saka cukup conto saka urip. Kabeh ana ing sekitar kita. Bisa uga "kewan", "mobil", "tokoh geometris" lan liya-liyane.

17. Apa bedane String, String Builder lan String Buffer?

Nilai kasebut Stringdisimpen ing blumbang string konstan. Sawise baris digawe, bakal katon ing blumbang iki. Lan ora bakal bisa mbusak. Tuladhane:
String name = "book";
...variabel bakal ngrujuk menyang blumbang string Kolam string konstan Top 50 Pitakonan Wawancara Inti Jawa lan Jawaban.  Bagean 1 - 4 Yen sampeyan nyetel jeneng variabel menyang nilai sing beda, sampeyan bakal entuk:
name = "pen";
Kolam senar konstan Top 50 Pitakonan Wawancara Inti Jawa lan Jawaban.  Bagean 1 - 5Dadi loro nilai kasebut bakal tetep ana. String Buffer:
  • Nilai Stringdisimpen ing tumpukan. Yen nilai diganti, banjur nilai anyar bakal diganti karo sing lawas;
  • String Bufferdiselarasake lan mulane Utas aman;
  • Amarga safety thread, kacepetan operasi ninggalake akeh sing dikarepake.
Tuladha:
StringBuffer name = "book";
Top 50 Pitakonan Wawancara Inti Jawa lan Jawaban.  Bagean 1 - 6Sanalika ing Nilai saka jeneng diganti, Nilai ing tumpukan owah-owahan: Top 50 Pitakonan Wawancara Inti Jawa lan Jawaban.  Bagean 1 - 7StringBuilder Persis padha StringBuffer, mung iku ora Utas aman. Mulane, kacepetan iku cetha luwih dhuwur tinimbang ing StringBuffer.

18. Apa bedane kelas abstrak lan antarmuka?

Kelas abstrak:
  • kelas abstrak duwe konstruktor standar; diarani saben-saben bocah saka kelas abstrak iki digawe;
  • ngemot metode abstrak lan non-abstrak. Umumé, bisa uga ora ngemot metode abstrak, nanging isih dadi kelas abstrak;
  • kelas sing marisi saka abstrak kudu ngleksanakake mung cara abstrak;
  • kelas abstrak bisa ngemot Variabel Kayata (ndeleng pitakonan #5).
Antarmuka:
  • ora duwe konstruktor lan ora bisa diinisialisasi;
  • mung cara abstrak sing kudu ditambahake (ora ngetung metode standar);
  • kelas sing ngleksanakake antarmuka kudu ngleksanakake kabeh cara (ora ngetung cara standar);
  • antarmuka mung bisa ngemot konstanta.

19. Apa ngakses unsur ing Uploaded njupuk O (1)?

Pitakonan iki secara harfiah saka wawancara pungkasan. Nalika aku sinau mengko, pitakonan iki takon kanggo ndeleng carane wong mikir. Cetha yen ora ana makna praktis ing kawruh iki: cukup ngerti kasunyatan iki. Kaping pisanan, kita kudu njlentrehake yen O (1) minangka sebutan kanggo kerumitan wektu saka algoritma nalika operasi ditindakake ing wektu sing tetep. Tegese, sebutan iki minangka eksekusi paling cepet. Kanggo njawab pitakonan iki, kita kudu ngerti apa sing kita ngerti babagan array? Kanggo nggawe array int, kita kudu nulis ing ngisor iki:
int[] intArray = new int[100];
Saperangan kesimpulan bisa dijupuk saka rekaman iki:
  1. Nalika nggawe larik, jinise dikenal, yen jinise dikenal, mula jelas ukurane saben sel larik kasebut.
  2. Dikenal apa ukuran array.
Iku nderek saka iki: kanggo ngerti sel kanggo nulis, sampeyan mung kudu ngetung area memori kanggo nulis. Kanggo mobil ora bisa luwih gampang. Mesin duwe wiwitan memori sing diparengake, sawetara unsur, lan ukuran sel siji. Saka iki cetha yen spasi rekaman bakal padha karo lokasi wiwitan array + ukuran sel sing dikalikan karo ukurane.

Kepiye sampeyan entuk O (1) kanggo ngakses obyek ing ArrayList?

Pitakonan iki langsung ngetutake sing sadurunge. Iku bener yen kita bisa karo Uploaded lan ana primitif ana, kita ngerti ing advance apa ukuran jinis iki nalika digawe. Nanging yen ana skema kaya sing ana ing gambar kasebut: Top 50 Pitakonan Wawancara Inti Jawa lan Jawaban.  Bagean 1 - 8lan kita pengin nggawe koleksi kanthi unsur jinis A, lan nambah implementasine beda - B, C, D:
List<A> list = new ArrayList();
list.add(new B());
list.add(new C());
list.add(new D());
list.add(new B());
Ing kahanan iki, kepiye sampeyan bisa ngerti ukuran saben sel, amarga saben obyek bakal beda lan bisa uga duwe lapangan tambahan sing beda (utawa beda banget). Apa sing kudu ditindakake? Ing kene pitakonan kasebut diajukake kanthi cara sing mbingungake lan mbingungake. Kita ngerti manawa koleksi kasebut ora nyimpen obyek, nanging mung nyambung menyang obyek kasebut. Lan kabeh pranala duwe ukuran padha, lan dikenal. Dadi ngetang spasi ing kene bisa digunakake kanthi cara sing padha kaya ing pitakonan sadurunge.

21. Autoboxing lan unboxing

Latar mburi sajarah: autoboxing lan autounboxing minangka salah sawijining inovasi utama JDK 5. Autoboxing minangka proses konversi otomatis saka jinis primitif menyang kelas bungkus sing cocog. Auto-unboxing - ora persis ngelawan saka otomatis boxing - ngowahi kelas wrapper menyang primitif. Nanging yen ana nilai pambungkus null, pangecualian bakal dibuwang nalika mbongkar NullPointerException.

Matching primitif - pambungkus

Primitif Kelas pambungkus
boolean Boolean
int Ongko
bait Byte
char Watak
ngambang ngambang
dawa dawa
cendhak Singkat
pindho pindho

Autopacking dumadi:

  • nalika menehi referensi primitif menyang kelas pambungkus:

    Sadurunge Jawa 5:

    //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
    }
  • nalika ngliwati primitif minangka argumen kanggo metode sing ngarepake pambungkus:

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

Mbukak kemasan otomatis dumadi:

  • nalika kita nemtokake variabel primitif menyang kelas pambungkus:

    //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;
  • Ing kasus karo operasi aritmetika. Dheweke mung ditrapake kanggo jinis primitif, kanggo iki sampeyan kudu nindakake unboxing menyang primitif.

    // 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
  • nalika diterusake menyang pambungkus kanthi cara sing nampa primitif sing cocog:

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

22. Apa tembung kunci pungkasan lan ing ngendi nggunakake?

Tembung kunci finalbisa digunakake kanggo variabel, metode lan kelas.
  1. Variabel pungkasan ora bisa ditugasake maneh menyang obyek liyane.
  2. kelas final steril)) ora bisa duwe ahli waris.
  3. cara pungkasan ora bisa ditindhes ing leluhur.
Kita wis nutupi ndhuwur, saiki ayo dibahas kanthi luwih rinci.

variabel pungkasan

;Jawa menehi rong cara kanggo nggawe variabel lan menehi sawetara nilai:
  1. Sampeyan bisa wara-wara variabel lan initialize mengko.
  2. Sampeyan bisa ngumumake variabel lan langsung nemtokake.
Conto nggunakake variabel pungkasan kanggo kasus kasebut:
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;
   }
}

Apa variabel Final bisa dianggep konstan?

Amarga kita ora bakal bisa menehi nilai anyar menyang variabel pungkasan, katon yen iki variabel konstan. Nanging iki mung ing kawitan marketing. Yen jinis data sing dirujuk variabel yaiku immutable, banjur ya, iku konstanta. Nanging yen jinis data mutablebisa diowahi, nggunakake metode lan variabel bakal bisa ngganti nilai obyek sing finaldiarani variabel, lan ing kasus iki ora bisa diarani konstanta. Dadi, contone nuduhake yen sawetara variabel pungkasan pancen konstan, nanging sawetara ora, lan bisa diganti.
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?");
}

Variabel final lokal

Nalika finalvariabel digawe ing njero metode, diarani local finalvariabel:
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);
       }
   }

}
Kita bisa nggunakake tembung kunci finaling loop lengkap foramarga sawise ngrampungake pengulangan loop, forvariabel anyar digawe saben wektu. Nanging iki ora ditrapake kanggo normal kanggo daur ulang, supaya kode ing ngisor iki bakal mbuwang kesalahan kompilasi-wektu.
// final local changed j cannot be assigned
for (final int i = 0; i < args.length; i ++) {
   System.out.println(args[i]);
}

Kelas pungkasan

Sampeyan ora bisa ngluwihi kelas sing diumumake minangka final. Cukup, ora ana kelas sing bisa warisan saka siji iki. Conto apik finalsaka kelas ing JDK yaiku String. Langkah pisanan kanggo nggawe kelas sing ora bisa diganti yaiku menehi tandha minangka final, supaya ora bisa ditambah:
public final class FinalExample {
}

// Compilation error here
class WantsToInheritFinalClass extends FinalExample {
}

Cara pungkasan

Nalika sawijining metode ditandhani final, diarani metode final (logis, bener?). Cara Final ora bisa diganti ing kelas turunan. Miturut cara, cara ing kelas Obyek - ngenteni () lan ngabari () - final, supaya kita ora duwe kesempatan kanggo ngatasi.
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";
   }
}

Carane lan ngendi nggunakake final ing Jawa

  • nggunakake tembung kunci pungkasan kanggo nemtokake sawetara konstanta tingkat kelas;
  • nggawe variabel final kanggo obyek nalika sampeyan ora pengin diowahi. Contone, properti khusus obyek sing bisa digunakake kanggo tujuan logging;
  • yen sampeyan ora pengin kelas ditambahi, tandhani minangka final;
  • yen sampeyan kudu nggawe kelas sing ora bisa diganti, sampeyan kudu nggawe final;
  • yen sampeyan pengin implementasine saka cara ora ngganti ing turunane, nemtokake cara minangka final. Iki penting banget kanggo mesthekake yen implementasine ora owah.

23. Apa sing ora bisa owah?

Mutable

Mutable minangka obyek sing negara lan variabel bisa diganti sawise digawe. Contone, kelas kayata StringBuilder, StringBuffer. Tuladha:
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());
   }
}

ora bisa owah

Immutable yaiku obyek sing status lan variabel ora bisa diganti sawise obyek digawe. Apa ora tombol gedhe kanggo HashMap, tengen?) Contone, String, Integer, pindho lan ing. Tuladha:
// 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. Kepiye carane nulis kelas sing ora owah?

Sawise sampeyan ngerteni apa obyek sing bisa diowahi lan ora bisa diganti, pitakonan sabanjure alam - kepiye carane nulis? Kanggo nulis kelas immutable immutable, sampeyan kudu tindakake langkah prasaja:
  • nggawe kelas final.
  • nggawe kabeh lapangan pribadi lan nggawe mung getter kanggo wong-wong mau. Setter, mesthi, ora perlu.
  • Nggawe kabeh kolom sing bisa diganti dadi final supaya nilai mung bisa disetel sapisan.
  • miwiti kabeh lapangan liwat konstruktor, nindakake salinan jero (yaiku, nyalin obyek kasebut, variabel, variabel variabel, lan liya-liyane)
  • kloning obyek variabel sing bisa diowahi ing getter kanggo ngasilake mung salinan nilai lan dudu referensi kanggo obyek sing nyata.
Tuladha:
/**
* 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;
   }
}
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION