JavaRush /Blog Java /Random-MS /Analisis soalan dan jawapan daripada temu bual untuk pemb...

Analisis soalan dan jawapan daripada temu bual untuk pembangun Java. Bahagian 4

Diterbitkan dalam kumpulan
Hello semua, hari ini saya terus menganalisis 250+ soalan temu bual untuk pembangun Java. Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 4 - 1Bahagian analisis sebelumnya: pertama , kedua , ketiga . Jadi mari kita teruskan.

29. Adakah mungkin untuk menggunakan pulangan dalam pembina?

Anda boleh, tetapi tanpa nilai pulangan di sebelah kanan pulangan . Iaitu, anda boleh menggunakan pulangan; sebagai pembinaan tambahan semasa pengiraan dalam pembina untuk segera menyelesaikan (mengganggu) pelaksanaan kod selanjutnya dan melengkapkan permulaan objek. Sebagai contoh, kami mempunyai kelas Cat , dan jika Cat tiada tempat tinggal - isHomeless = true , kami perlu menyelesaikan permulaan dan tidak mengisi medan lain (lagipun, mereka tidak diketahui oleh kami, kerana kucing itu tiada tempat tinggal):
public Cat(int age, String name, boolean isHomeless) {
   if (isHomeless){
       this.isHomeless = isHomeless;
       return;
   }
   this.isHomeless = isHomeless;
   this.age = age;
   this.name = name;
}
Tetapi apabila ia datang kepada nilai tertentu, pembina tidak boleh menggunakan pulangan untuk mengembalikan nilai kerana:
  • apabila mengisytiharkan pembina anda tidak akan mempunyai apa-apa yang menyerupai jenis pulangan;
  • Biasanya, pembina dipanggil secara tersirat semasa instantiasi;
  • Pembina bukan kaedah: ia adalah mekanisme berasingan yang tujuan utamanya adalah untuk memulakan pembolehubah contoh, dan pengendali baharu bertanggungjawab untuk mencipta objek .
Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 4 - 2

30. Adakah mungkin untuk membuang pengecualian daripada pembina?

Pembina menangani pengecualian dengan cara yang sama seperti kaedah. Dan jika kaedah membenarkan kita membuang pengecualian dengan menulis lontaran <ExceptionType> dalam pengepala kaedah , maka pembina membenarkan kita melakukan ini, dan juga apabila mewarisi dan mentakrifkan pembina pewaris, kita boleh mengembangkan jenis pengecualian. Contohnya, IOException -> Exception (tetapi bukan sebaliknya). Sebagai contoh untuk membuang pengecualian oleh pembina, mari kita ambil kelas Cat . Katakan apabila menciptanya kita mahu memasukkan nama dan umur daripada konsol:
public Cat() throws IOException {
   BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
   this.name = reader.readLine();
   this.age = Integer.parseInt(reader.readLine());
}
Oleh kerana reader.readLine() membuang IOException, kami menentukannya dalam pengepala sebagai kemungkinan pengecualian yang dilontar.

31. Apakah elemen yang mengandungi pengepala kelas? Tulis satu contoh

Bercakap tentang elemen yang membentuk pengepala kelas, mari kita lihat gambar rajah kecil:
  • komponen wajib akan berada dalam kurungan <>
  • pilihan - dalam {}
{pengubahsuai akses kelas}{statik kelas}{kemuktamadan kelas}{abstraksi kelas} <nama kelas>{warisan daripada kelas Induk} {pelaksanaan antara muka} Jadi, apa yang kita ada: {class access modifier} - hanya pengubah suai awam dan pengubah akses yang hilang, iaitu lalai , tersedia untuk kelas . {class static} - static ialah pengubah suai yang menunjukkan bahawa kelas ini adalah statik, hanya terpakai kepada kelas dalam (kelas dalam kelas lain). {class finality} - seperti yang kita ingat, ini ialah pengubah akhir , dengan kehadiran kelas tersebut menjadi tidak boleh diwarisi (contoh dari kotak - String ). {class abstraction} - modifier - abstract , yang menunjukkan bahawa kelas ini mungkin mempunyai kaedah yang tidak dilaksanakan. Pengubah suai ini bercanggah dengan pengubah suai akhir , iaitu, hanya satu daripadanya boleh berada dalam pengepala kelas, kerana pengubah abstrak membayangkan bahawa kelas yang diberikan akan diwarisi dan bahagian abstraknya akan dilaksanakan. Dan akhir menunjukkan bahawa ini adalah versi terakhir (akhir) kelas, dan ia tidak boleh diwarisi. Sebenarnya, menggunakan kedua-dua pengubah pada masa yang sama adalah tidak masuk akal, dan pengkompil tidak akan membenarkan kami melakukan ini. <class> ialah kata kunci yang diperlukan yang menunjukkan pengisytiharan kelas. <class name> ialah nama kelas yang ringkas, yang merupakan pengecam kelas Java tertentu. Nama kelas yang layak sepenuhnya terdiri daripada nama pakej yang layak sepenuhnya + . + nama kelas yang mudah. {inheritance from Parent class} - menyatakan kelas induk (jika ada) menggunakan kata kunci extends . Contohnya, .. extends ParentClass . {interface implementation} - menyatakan antara muka yang kelas ini laksanakan (jika ada) menggunakan kata kunci implements . Contohnya: ... melaksanakan FirstInterface, SecondInterface ... Nah, sebagai contoh pengepala kelas, pertimbangkan pengepala kelas Lion , yang mewarisi daripada Cat dan melaksanakan antara muka WildAnimal :
public final class Lion extends Cat implements WildAnimal
Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 4 - 3

32. Apakah elemen yang mengandungi tajuk kaedah? Tulis satu contoh

Sekali lagi, apabila melihat elemen yang membentuk pengepala kaedah, pertimbangkan gambar rajah kecil di mana:
  • komponen wajib ada dalam kurungan <>
  • pilihan - dalam {}
{pengubahsuai capaian}{kaedah statik}{pengabstrakan kaedah}{kemuncak kaedah}{pengubah suai penyegerakan} {pengubah suai asli}<nilai pulangan><nama kaedah> <(> {argumen kaedah} <)>{pengecualian yang dilontarkan} {pengubah suai akses } — semua pengubah suai akses tersedia untuk kaedah: awam , dilindungi , lalai , peribadi . {method static} - statik ialah pengubah suai yang menunjukkan bahawa kaedah ini adalah statik, iaitu, ia tidak terikat pada objek, tetapi kepada kelas. {method abstraction} ialah pengubah suai abstrak , yang menunjukkan bahawa tiada pelaksanaan (badan) kaedah. Untuk operasi yang betul, anda juga memerlukan pengubah suai abstrak untuk kelas di mana kaedah itu disediakan. Seperti dalam pengepala kelas, pengubah suai ini bercanggah dengan pengubah suai akhir , tetapi selain itu, ia juga bercanggah dengan pengubah suai statik , kerana kaedah abstrak membayangkan mengatasi kaedah dalam keturunan, dan kaedah statik tidak ditindih. {finality of the method} - final - pengubah suai yang menunjukkan bahawa kaedah ini tidak boleh ditindih. {synchronization modifier} - synchronized - pengubah suai yang bermaksud kaedah ini dilindungi daripada akses serentak kepadanya daripada urutan yang berbeza. Jika kaedah tidak statik, ia menutup pada mutex objek ini. Jika kaedah adalah statik, ia ditutup pada mutex kelas semasa. {native modifier} - native - pengubah suai ini menunjukkan bahawa kaedah ditulis dalam bahasa pengaturcaraan yang berbeza. <return value> ialah jenis nilai yang harus dipulangkan oleh kaedah. Jika ia tidak mengembalikan apa-apa, batal . <nama kaedah> ialah nama kaedah, pengecamnya dalam sistem. {method arguments} ialah argumen (parameter) yang digunakan oleh kaedah: ia perlu untuk melaksanakan fungsinya. {throwable exceptions} - throwsExceptionType - senarai pengecualian yang diperiksa yang boleh dilemparkan oleh kaedah ini. Dan sebagai contoh pengepala kaedah, saya akan memberikan ini:
public static void main(String[] args) throws IOException

33. Buat pembina lalai dalam objek keturunan jika ia tidak ditakrifkan dalam objek asas (tetapi pembina lain ditakrifkan)

Saya tidak memahami sepenuhnya soalan itu sendiri, tetapi mungkin ia bermakna, sebagai contoh, dalam ibu bapa kita mempunyai beberapa pembina tersuai:
public Cat(int age, String name) {
   this.age = age;
   this.name = name;
}
Oleh itu, dalam kelas leluhur, kita pasti perlu menentukan pembina yang akan mengisi (memanggil) pembina induk:
public  class Lion extends Cat {

   public Lion(int age, String name) {
       super(age, name);
   }
}
Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 4 - 4

34. Bilakah kata kunci ini digunakan?

Di Jawa, ini mempunyai dua makna yang berbeza. 1. Sebagai rujukan kepada objek semasa, seperti ini.umur = 9 . Iaitu, ini merujuk kepada objek yang ia dipanggil dan yang kod yang menggunakan ini merujuk . Fungsi utama adalah untuk meningkatkan kebolehbacaan kod dan mengelakkan kekaburan. Sebagai contoh, jika nama medan kelas dalaman dan hujah kaedah adalah sama:
public void setName(String name) {
   this.name = name;
}
Iaitu, this.name ialah medan nama objek ialah hujah kaedah. Rujukan ini tidak boleh digunakan dalam kaedah statik. 2. ini boleh digunakan dalam pembina dalam bentuk panggilan kaedah, seperti this(value) . Dalam kes ini, ia akan menjadi panggilan kepada pembina lain daripada kelas yang sama. Ringkasnya, anda boleh memanggil dua pembina sekaligus apabila mencipta objek:
public Cat(int age, String name) {
   this(name);
   this.age = age;
}

public Cat(String name) {
   this.name = name;
}
Apabila objek Cat dicipta dan pembina pertama dipanggil, kedua-dua medan objek akan dipanggil dan berjaya dimulakan. Terdapat beberapa nuansa:
  1. this() hanya berfungsi dalam pembina.
  2. Rujukan kepada pembina lain mesti berada di baris pertama blok pembina (badan). Oleh itu, lebih daripada satu (lain) pembina kelas tertentu tidak boleh dipanggil dalam satu pembina.
Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 4 - 5Lebih banyak contoh terdapat dalam artikel ini .

35. Apakah itu pemula?

Setakat yang saya faham, dalam soalan ini kita bercakap tentang blok permulaan biasa dan statistik. Mula-mula, mari kita ingat apa itu permulaan. Inisialisasi adalah penciptaan, pengaktifan, penyediaan untuk kerja, penentuan parameter. Membawa program atau komponen ke dalam keadaan sedia untuk digunakan. Seperti yang anda ingat, semasa penciptaan objek, pembolehubah kelas boleh dimulakan secara langsung selepas pengisytiharan:
class Cat {
   private int age = 9;
   private  String name = "Tom";
Atau tetapkannya secara luaran melalui pembina:
class Cat {
   private int age;
   private  String name;

   public Cat(int age, String name) {
       this.age = age;
       this.name = name;
   }
Tetapi ada cara lain: untuk menetapkan pembolehubah objek dalaman melalui blok permulaan, yang kelihatan seperti pendakap kerinting { } di dalam kelas, tanpa nama (seperti kaedah atau pembina):
class Cat {
   private int age;
   private  String name;

   {
       age = 10;
       name = "Tom";
   }
Iaitu, blok permulaan ialah sekeping kod yang dimuatkan apabila objek dicipta. Biasanya, blok tersebut digunakan untuk melakukan beberapa pengiraan kompleks yang diperlukan semasa memuatkan kelas. Hasil pengiraan ini boleh ditentukan sebagai nilai untuk pembolehubah. Selain itu, sebagai tambahan kepada blok permulaan biasa, terdapat blok statik, yang kelihatan sama, tetapi mempunyai kata kunci statik sebelum pendakap kerinting :
class Cat {
   private static int age;
   private static String name;

   static{
       age = 10;
       name = "Tom";
   }
Blok ini betul-betul sama dengan yang sebelumnya. Tetapi jika yang biasa dicetuskan apabila setiap objek dimulakan, maka yang statik akan mencetuskan sekali sahaja, apabila kelas dimuatkan. Dalam blok sedemikian, sebagai peraturan, beberapa pengiraan kompleks juga dilakukan untuk permulaan seterusnya pembolehubah kelas statik. Sekatan yang sama dikenakan pada blok statik seperti kaedah statik: ia tidak boleh menggunakan data bukan statik, serta rujukan kepada objek semasa - ini . Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 4 - 6Seterusnya, kita boleh melihat susunan permulaan kelas (bersama-sama dengan nenek moyangnya) untuk pemahaman yang lebih baik tentang saat apabila blok permulaan dicetuskan.

36. Untuk mewarisi kelas awam kelas Child extends Parent, tulis susunan permulaan objek

Apabila kelas Kanak-kanak dimuatkan, susunan permulaan adalah seperti berikut:
  1. Medan statik kelas Induk .
  2. Blok permulaan statik untuk kelas Induk .
  3. Medan statik kelas Kanak-kanak .
  4. Blok permulaan statik untuk kelas Kanak-kanak .
  5. Medan bukan statik kelas Induk .
  6. Bukan blok permulaan statik untuk kelas Induk .
  7. Pembina untuk kelas Induk .
  8. Medan bukan statik bagi kelas Kanak-kanak .
  9. Bukan blok permulaan statik untuk kelas Kanak-kanak .
  10. Pembina kelas Kanak-kanak .
Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 4 - 7Berikut ialah artikel pendek yang menerangkan susunan permulaan dalam amalan.

37. Apakah hubungan yang anda ketahui antara kelas (objek)?

Terdapat dua jenis hubungan antara kelas di Jawa:
  • IS- Perhubungan
Prinsip IS-A dalam OOP adalah berdasarkan warisan kelas atau pelaksanaan antara muka. Sebagai contoh, jika kelas Lion mewarisi daripada Cat , kita katakan Lion ialah Cat :
Lion IS-A Cat
(tetapi bukan setiap Kucing adalah Singa ) Keadaannya adalah sama dengan antara muka. Jika kelas Lion melaksanakan antara muka WildAnimal , maka mereka juga berada dalam hubungan:
Lion IS-A WildAnimal
  • Hubungan HAS-A
Jenis perhubungan ini adalah berdasarkan penggunaan kelas oleh kelas lain, juga dipanggil "persatuan". Persatuan ialah satu kelas yang merujuk kepada kelas lain (atau antara satu sama lain). Sebagai contoh, kelas Kereta boleh merujuk kepada kelas Penumpang , dan ini akan menjadi perhubungan:
Car HAS-A Passenger
Dan sebaliknya: jika Penumpang merujuk kepada Kereta , maka ini akan menjadi hubungannya:
Passenger HAS-A Car

38. Apakah perkaitan bersekutu antara objek yang anda tahu?

Pengagregatan dan komposisi tidak lebih daripada kes perkaitan khas. Pengagregatan ialah hubungan di mana satu objek adalah sebahagian daripada yang lain. Sebagai contoh, penumpang mungkin berada di dalam kereta. Juga, mungkin terdapat beberapa penumpang atau tidak sama sekali (jika kita bercakap tentang Tesla, maka pemandu tidak diperlukan). Sebagai contoh:
public class Car {
   private List passengers = new ArrayList<>();

 void setPassenger(Passenger passenger) {
     passengers.add(passenger);
 }

   void move() {
       for (Passenger passenger : passengers) {
           System.out.println("Перевозка пассажира - " + passenger.toString());
       }
       passengers.clear();
   }
}
Iaitu, kami tidak mengambil berat tentang bilangan penumpang (atau sama ada terdapat sama sekali): fungsi kelas Kereta tidak bergantung pada ini. Pengagregatan juga membayangkan bahawa apabila objek digunakan oleh objek lain, yang pertama boleh digunakan dalam objek lain. Contohnya, pelajar yang sama boleh menjadi ahli kelab mengait dan kumpulan muzik rock, dan pada masa yang sama pergi ke kumpulan pelajar bahasa Inggeris. Seperti yang anda fahami, pengagregatan ialah hubungan persekutuan yang lebih longgar antara kelas. Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 4 - 8Komposisi adalah hubungan yang lebih tegar apabila objek bukan sahaja sebahagian daripada objek lain, tetapi kerja objek lain sangat bergantung pada yang pertama. Contohnya, enjin kereta. Walaupun enjin mungkin wujud tanpa kereta, ia tidak berguna di luarnya. Nah, kereta tidak boleh berfungsi tanpa enjin:
public class Car {
   private Engine engine;

   public Car(Engine engine) {
       this.engine = engine;
   }

   void startMoving() {
       engine.start();
           ...
   }
Komposisi juga membayangkan bahawa apabila objek digunakan oleh objek lain, yang pertama tidak boleh dimiliki oleh orang lain. Jika kita kembali kepada contoh kita, enjin hanya boleh dimiliki oleh satu kereta, tetapi bukan untuk dua atau lebih pada masa yang sama. Kami mungkin akan berhenti di sini hari ini.Analisis soalan dan jawapan daripada temu bual untuk pembangun Java.  Bahagian 4 - 9
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION