Hello, kabeh! Dina iki aku nerusake review pitakonan wawancara pangembang Jawa.
29. Bisa bali digunakake ing konstruktor?
Ya, nanging mung tanpa nilai ing sisih tengen tembung kunci bali . Sampeyan bisa nggunakake bali; minangka statement helper ing konstruktor kanggo urgently siksa (interrupted) eksekusi kode luwih lan rampung initialization saka obyek. Contone, umpamane kita duwe kelas Kucing , lan yen Kucing ora duwe omah ( isHomeless = true , banjur kita pengin mungkasi initialization lan ora ngisi kolom liyane (sawise kabeh, dheweke ora dingerteni, amarga kucing ora duwe omah) :public Cat(int age, String name, boolean isHomeless) {
if (isHomeless){
this.isHomeless = isHomeless;
return;
}
this.isHomeless = isHomeless;
this.age = age;
this.name = name;
}
Nanging yen kita ngomong babagan nilai konkrit, tembung kunci bali ora bisa ngasilake nilai tartamtu amarga:
- nalika wara-wara konstruktor a, sampeyan ora bakal duwe apa-apa kaya jinis bali;
- minangka aturan, konstruktor diarani sacara implisit sajrone instantiation;
- konstruktor ora cara: iku mekanisme kapisah kang siji waé kanggo initialize variabel Kayata, IE, kita nggunakake operator anyar kanggo nggawe obyek.
30. Apa pangecualian bisa dibuwang saka konstruktor?
Konstruktor nggarap pangecualian kanthi cara sing padha karo metode. Metode ngidini kita mbuwang pengecualian kanthi nulis mbuwang <ExceptionType> ing header metode. Lan konstruktor ngidini kita nindakake perkara sing padha. Nalika kita marisi lan nemtokake konstruktor kelas anak, kita bisa nggedhekake jinis pangecualian - contone, IOException -> Exception (nanging ora kosok balene). Ayo dadi nggunakake konstruktor kelas Cat minangka conto konstruktor mbuwang pangecualian. Contone, nalika nggawe obyek, kita pengin ngetik jeneng lan umur saka console:public Cat() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
this.name = reader.readLine();
this.age = Integer.parseInt(reader.readLine());
}
Wiwit reader.readLine () mbuwang IOException, kita nulis ing header minangka pangecualian bisa di buwang.
31. Apa wae unsur header kelas? Tulis tuladha
Kanggo nggambarake unsur-unsur sing nggawe header kelas, ayo deleng skema cilik:- unsur wajib katon ing kurung <>
- unsur opsional ana ing {}
public final class Lion extends Cat implements WildAnimal
32. Apa wae unsur-unsur header metode? Tulis tuladha
Nalika nimbang unsur sing nggawe header metode, ayo maneh nimbang skema cilik:- unsur wajib katon ing kurung <>
- unsur opsional ana ing {}
public static void main(String[] args) throws IOException
33. Nggawe konstruktor standar ing kelas anak yen siji durung ditetepake ing kelas dhasar (nanging konstruktor beda ditetepake)
Aku ora yakin aku ngerti pitakonan, nanging bisa uga tegese kita duwe sawetara konstruktor kaya iki ing kelas induk:public Cat(int age, String name) {
this.age = age;
this.name = name;
}
Ing kasus kasebut, ing kelas induk, kita kudu nemtokake konstruktor sing bakal nginisialisasi wong tuwa (yaiku nelpon konstruktor induk):
public class Lion extends Cat {
public Lion(int age, String name) {
super(age, name);
}
}
34. Kapan tembung kunci iki digunakake?
Ing Jawa, iki nduweni rong makna sing beda. 1. Iku referensi kanggo obyek saiki, contone this.age = 9 . Yaiku, iki nuduhake obyek sing digunakake lan kode kasebut nuduhake . Tujuan utama yaiku ningkatake keterbacaan kode lan ngindhari ambiguitas. Contone, yen kolom conto lan argumen metode duwe jeneng sing padha:public void setName(String name) {
this.name = name;
}
Yaiku, this.name minangka kolom obyek, dene jeneng minangka parameter metode. Referensi iki ora bisa digunakake ing cara statis. 2. Ing konstruktor, iki bisa diarani kaya metode, contone this(value) . Ing kasus iki, iku bakal telpon kanggo konstruktor liyane saka kelas padha. Sejatine, sampeyan bisa nelpon loro konstruktor sajrone proses nggawe obyek:
public Cat(int age, String name) {
this(name);
this.age = age;
}
public Cat(String name) {
this.name = name;
}
Nalika nelpon konstruktor pisanan kanggo nggawe obyek Cat , loro lapangan conto bakal sukses diinisialisasi. Ana sawetara nuansa ing kene:
- iki () mung dianggo ing konstruktor a.
- A referensi kanggo konstruktor liyane kudu ing baris pisanan saka pamblokiran konstruktor (awak). Iki tegese konstruktor ora bisa nelpon luwih saka siji (liyane) konstruktor saka sawijining kelas.
35. Apa iku initializer?
Sa adoh aku ngerti, pitakonan iki babagan pamblokiran initialization biasa lan statis. Ayo dadi elinga dhisik apa initialization. Inisialisasi yaiku nggawe, aktivasi, persiapan, lan definisi lapangan. Nyiapake program utawa komponen sing siap digunakake. Sampeyan bakal kelingan yen sampeyan nggawe obyek, variabel kelas bisa diwiwiti langsung nalika diumumake:class Cat {
private int age = 9;
private String name = "Tom";
Utawa nyetel sawise kasunyatan liwat konstruktor:
class Cat {
private int age;
private String name;
public Cat(int age, String name) {
this.age = age;
this.name = name;
}
Nanging ana cara liya: sampeyan bisa nyetel variabel instance nggunakake blok inisialisasi, sing bentuke kurung kriting {} ing njero kelas, tanpa jeneng (kaya metode utawa konstruktor tanpa jeneng):
class Cat {
private int age;
private String name;
{
age = 10;
name = "Tom";
}
Blok inisialisasi minangka potongan kode sing dimuat nalika obyek digawe. Pamblokiran kuwi biasane digunakake kanggo nindakake petungan Komplek tartamtu sing dibutuhake nalika kelas dimuat. Asil petungan kasebut bisa disetel minangka nilai variabel. Saliyane pamblokiran initialization biasa, ana sing statis. Padha katon padha nanging duwe tembung kunci statis ing ngarepe kurung kriting bukaan:
class Cat {
private static int age;
private static String name;
static{
age = 10;
name = "Tom";
}
Blok iki padha karo sing sadurunge. Nanging yen sing biasa dieksekusi nalika saben obyek diinisialisasi, banjur sing statis dieksekusi mung sapisan, nalika kelas dimuat. Minangka aturan, pitungan kompleks tartamtu ditindakake ing blok statis, digunakake kanggo miwiti variabel kelas statis. Watesan sing padha ditrapake kanggo blok statis sing ditrapake kanggo metode statis: sampeyan ora bisa nggunakake data non-statis, kayata referensi kanggo obyek saiki ( iki ) ing blok statis. Saiki kita bisa ndeleng urutan initialization kelas (bebarengan karo kelas induk) supaya luwih ngerti nalika persis pamblokiran initialization dijaluk.
36. Diwenehi kelas Anak umum sing ngluwihi Parent, nulis metu urutan initialization saka obyek
Nalika mbukak kelas Anak , urutan initialization bakal kaya ing ngisor iki:- Bidang kelas statis saka kelas Induk .
- Blok initialization statis saka kelas Induk .
- Bidang statis saka kelas Сhild .
- Blok inisialisasi statis saka kelas Anak .
- Bidang non-statis saka kelas Induk .
- Blok inisialisasi non-statis saka kelas Induk .
- Konstruktor kelas induk .
- Bidang non-statis saka kelas Сhild .
- Blok inisialisasi non-statis saka kelas Сhild .
- Konstruktor saka kelas Сhild .
37. Apa hubungane antarane kelas (obyek) sing sampeyan ngerti?
Ana rong jinis variabel ing Jawa: jinis primitif lan referensi kanggo obyek lengkap.- Hubungan IS-A
Lion IS-A Cat
(nanging ora saben Kucing iku Singa ) Kahanan sing padha ana karo antarmuka. Yen kelas Lion ngetrapake antarmuka WildAnimal , mula uga ana ing hubungan kasebut:
Lion IS-A WildAnimal
- Hubungan HAS-A
Car HAS-A Passenger
Lan kosok balene: yen Penumpang duwe referensi kanggo Mobil , banjur iki bakal dadi hubungan:
Passenger HAS-A Car
38. Sesambungan objek asosiatif apa sing sampeyan ngerti?
Agregasi lan komposisi ora luwih saka kasus asosiasi khusus. Agregasi minangka sesambungan ing ngendi siji obyek dadi bagean liyane. Contone, penumpang bisa uga ana ing mobil. Apa maneh, bisa uga ana sawetara penumpang utawa ora ana (lan yen kita ngomong babagan Tesla, bisa uga ora ana driver). Tuladhane:public class Car {
private List passengers = new ArrayList<>();
void setPassenger(Passenger passenger) {
passengers.add(passenger);
}
void move() {
for (Passenger passenger : passengers) {
System.out.println("Transporting passenger - " + passenger.toString());
}
passengers.clear();
}
}
Ing tembung liyane, jumlah penumpang (ing sembarang) ora penting kanggo kita: fungsi saka kelas Car ora gumantung iki. Agregasi uga nuduhake yen obyek liyane nggunakake siji obyek, obyek pisanan bisa digunakake dening obyek liyane. Contone, siswa sing padha bisa uga ana ing klub nyulam lan band rock lan bebarengan melu kelas Spanyol. Minangka sampeyan bisa mbayangno, agregasi minangka hubungan asosiatif sing luwih longgar antarane kelas. Komposisi minangka hubungan sing luwih kenceng ing ngendi obyek ora mung bagean saka obyek liyane, nanging karya siji obyek gumantung banget marang liyane. Contone, mobil duwe mesin. Mesin bisa uga ana tanpa mobil, nanging ora ana gunane ing njaba mobil. Lan mobil ora bisa mlaku tanpa mesin:
public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
void startMoving() {
engine.start();
...
}
Komposisi uga nuduhake yen obyek liyane nggunakake obyek, obyek pisanan ora bisa dadi kagungane obyek liyane. Bali menyang contone, mesin mung bisa dadi siji mobil, ora loro utawa luwih bebarengan. Aku rumangsa cukup kanggo dina iki, mula kita mandheg ing kene.
GO TO FULL VERSION