Hai! Sama seperti mustahil untuk belajar cara menerbangkan kapal terbang tanpa latihan khas, anda tidak boleh menjadi pembangun Java tanpa menghabiskan berjam-jam mempelajari asas teori yang diperlukan. Dan itulah yang akan kami usahakan hari ini: kami akan terus meneroka soalan yang dihadapi semasa temu duga kerja untuk pembangun Java, dan, sudah tentu, kami akan melihat jawapannya. Berikut ialah bahagian pertama
dan kedua
gambaran keseluruhan ini. Tidak syak lagi anda boleh menjadi pembangun Java yang baik tanpa semua soalan ini. Walau bagaimanapun, jika anda mempunyai pemahaman yang baik tentang semua selok-belok Java, anda pasti akan mempunyai kelebihan dan akan kelihatan lebih menarik di mata majikan masa depan anda.
20. Apakah unsur-unsur bahasa yang membolehkan enkapsulasi?
Mari kita ingat bahawa enkapsulasi adalah mengenai menyembunyikan butiran pelaksanaan kelas. Dalam erti kata lain, apabila kelas kita digunakan, dalaman dan logik dalaman tidak jelas kepada orang luar. Dan apakah unsur-unsur bahasa yang bertanggungjawab untuk ini? Akses pengubah suai , sudah tentu! Apa sahaja yang perlu kami sembunyikan, kami tandakan dengan pengubah suai peribadi . Contohnya, medan peribadi kelas atau beberapa kaedah dalaman yang membantu melaksanakan beberapa fungsi dalaman. Dan untuk apa sahaja yang kami ingin berikan akses luaran, kami menambah pengubah suai akses awam . Sebagai contoh, kaedah yang melaksanakan beberapa fungsi (yang mungkin menggunakan banyak kaedah peribadi secara dalaman) atau, sudah tentu, pengambil dan penetap untuk mengakses medan peribadi kelas. Kami belum lagi menyebut pengubah lalai dan dilindungi , yang boleh digunakan dengan lebih fleksibel dan khusus menyesuaikan akses kepada bahagian kelas tertentu.21. Apakah unsur bahasa yang membolehkan pewarisan?
Warisan ialah mekanisme yang membolehkan anda membuat kelas berdasarkan kelas lain. Java mempunyai kata kunci lanjutan untuk ini. Sebagai contoh, katakan kita mempunyai kelas Cat dan kita mahu mencipta kelas anak Singa . Dalam kod, ia akan kelihatan seperti ini:public class Lion extends Cat
Dan ini bermakna bahawa kelas Lion mewarisi semua kaedah dan pembolehubah kelas Cat , kecuali pembolehubah statik. Satu lagi unsur bahasa yang bertanggungjawab untuk warisan ialah super . Ia adalah rujukan yang serupa dengan ini . Kata kunci ini merujuk kepada objek di mana ia dirujuk. Kata kunci super merujuk kepada induk objek semasa. Biasanya super digunakan:
-
Untuk memanggil pembina kelas super. Sebagai contoh, kelas Cat mempunyai pembolehubah nama dalaman yang mesti dimulakan dalam pembina. Dalam pembina kelas Lion , itu akan kelihatan seperti ini:
public Lion(final String name) { super(name); }
-
Untuk merujuk kepada bidang dan kaedah induk. Sebagai contoh, dalam kelas Cat , kami mempunyai medan umur yang dimulakan :
public class Cat { int age = 10;
public class Lion extends Cat {
int age = 15;
Dan jika dalam objek Singa kita ingin merujuk kepada pembolehubah umur objek induk, maka kita perlu melakukannya melalui super :
super.name
22. Apakah unsur-unsur bahasa yang bertanggungjawab untuk polimorfisme?
Polimorfisme ialah keupayaan objek dengan satu tandatangan untuk mengambil pelbagai bentuk (banyak pelaksanaan). Kami dengan yakin boleh menyatakan bahawa implement dan extends keywords Java bertanggungjawab untuk polimorfisme. Apabila kita mempunyai antara muka, implement membolehkan kita menyediakan satu pelaksanaan yang mungkin, tetapi itu tidak semestinya satu-satunya pelaksanaan, bukan? Mari kita lihat semula rupa penggunaan implements :public class Cat implements Animal
Kemudian dalam kelas Cat , kita perlu melaksanakan semua kaedah abstrak dalam antara muka Haiwan . Warisan juga: dalam kelas anak, kita boleh mengatasi pelaksanaan kaedah sedia ada. Ini bermakna dengan berbilang kelas kanak-kanak, kita boleh mempunyai beberapa penggantian berbeza bagi kaedah yang sama. Atau superclass boleh menjadi abstrak dan mempunyai kaedah tertentu yang mesti dilaksanakan dengan cara yang istimewa dalam setiap kelas anaknya. Dalam erti kata lain, kaedah ini akan mempunyai banyak pelaksanaan yang berbeza. Anotasi @Override juga boleh membantu kami dalam hal ini. Ia diletakkan di atas kaedah yang dilaksanakan dan menunjukkan bahawa kita ingin melaksanakan atau mengatasi (jika pelaksanaan sudah wujud dalam superclass) kaedah tertentu superclass atau antara muka. Ia adalah pilihan dan membantu mengesan ralat dengan lebih mudah. Anda menggunakan anotasi ini untuk memberitahu pengkompil bahawa anda ingin mengatasi/melaksanakan kaedah superclass/antara muka. Pengkompil kemudian akan memastikan bahawa anda tidak membuat kesilapan dalam tandatangan kaedah.
23. Apakah itu SOLID? Berikan contoh
SOLID ialah akronim untuk lima prinsip reka bentuk OOP asas Robert Martin. S (Prinsip tanggungjawab tunggal) : menyatakan bahawa kelas harus mempunyai satu tujuan/tanggungjawab sahaja. Dalam erti kata lain, anda tidak sepatutnya membuat kelas yang melakukan segala-galanya. Jika anda berbuat demikian, anda boleh menghasilkan semula "Objek Tuhan" anti-corak. Jika anda mempunyai objek Cat , ia sepatutnya mempunyai kaedah hanya untuk berinteraksi dengan kefungsian dalamannya, tetapi ia tidak seharusnya mengandungi sebarang logik perniagaan yang tidak berkaitan dengan kejadian itu. Sebagai contoh, beberapa mekanisme untuk menyimpan objek jenis ini. Fungsi ini (luaran kepada entiti Cat ) harus dialihkan ke kelas atau perkhidmatan lain, yang tugasnya adalah untuk menyediakan logik perniagaan untuk objek yang sepadan. O (Prinsip terbuka-tertutup) : Prinsip ini diterangkan seperti berikut: entiti perisian (kelas, modul, fungsi, dll.) harus dibuka untuk sambungan tetapi ditutup untuk pengubahsuaian. Sebagai contoh, katakan kita memerlukan kefungsian yang serupa tetapi berbeza sedikit daripada kefungsian kelas Cat sedia ada kami . Daripada menukar kefungsian kelas Cat dan dengan itu memecahkan kod di mana-mana sahaja ia telah digunakan, kita boleh menggunakan warisan atau gubahan . Oleh itu, kami mencapai matlamat kami untuk mengubah suai kefungsian kelas Cat , dan kami melakukannya tanpa mengubah kelas itu sendiri dan tanpa melanggar apa-apa. L (Prinsip Penggantian Liskov) : ini adalah prinsip penggantian Barbara Liskov. Prinsipnya mengatakan bahawa fungsi yang mengambil jenis asas sepatutnya boleh menggunakan subjenis jenis asas itu tanpa mengetahui apa yang berlaku. Sebagai contoh, kelas Cat kami harus digantikan oleh mana-mana keturunannya, katakan, Lion , tanpa mengubah tingkah lakunya secara asas. Logik umum (tingkah laku) tetap sama, tetapi butiran pelaksanaan fungsi tertentu berubah. I (Prinsip pengasingan antara muka) : prinsip ini menyatakan bahawa adalah lebih baik untuk mempunyai banyak antara muka khusus (terfokus sempit) daripada satu antara muka universal. Sebagai contoh, katakan pembangun melaksanakan beberapa antara muka. Mereka hanya memerlukan satu daripada kaedahnya, tetapi antara muka mempunyai sembilan lagi kaedah yang tidak berkaitan dengan logik kaedah yang diperlukan. Dalam kes ini, pembangun perlu melaksanakan sepuluh kaedah antara muka, sembilan daripadanya tidak diperlukan untuk mereka! Sebaliknya, lebih baik membuat sepuluh antara muka berbeza yang boleh anda laksanakan mengikut keperluan. Nah, jika tidak sepuluh, maka beberapa, masing-masing dengan kaedah yang berkait rapat dengan tujuan tunggal antara muka. D (Prinsip penyongsangan kebergantungan): Prinsip mengatakan bahawa modul peringkat tinggi tidak boleh bergantung pada modul peringkat rendah. Prinsip ini juga menyatakan, "Abstraksi tidak harus bergantung pada perincian. Perincian harus bergantung pada abstraksi." Kita mesti membina logik kita dengan merujuk kepada antara muka dan menyampaikan objek konkrit kelas yang melaksanakan antara muka yang diperlukan. Sebagai contoh, katakan kita mempunyai antara muka Cat dan beberapa pelaksanaan, katakan, Lion dan HouseCat . Kami membina logik kami secara khusus untuk berinteraksi dengan antara muka Cat . Kami hanya kemudian menggantikan antara muka dengan pelaksanaan tertentu ( Lion atau HouseCat ), tetapi bukan sebaliknya.24. Apakah kelas, objek dan antara muka?
Kami akan ingat bahawa Java ialah bahasa OOP. Iaitu, program Java dibina berdasarkan interaksi antara objek. Program adalah seperti sarang semut, di mana setiap semut adalah objek. Objek adalah koleksi data yang merangkumi pelbagai kaedah (fungsi) untuk berinteraksi dengan data dalaman ini. Kelas ialah arahan atau templat untuk mencipta objek. Ini bermakna kita boleh mempunyai banyak objek yang dibina mengikut arahan yang sama tetapi diisi dengan data yang berbeza (atau sama). Mengambil contoh daripada kehidupan sebenar, kita boleh mengatakan bahawa kelas ialah rangka tindakan bangunan, dan objek ialah bangunan yang dibina secara khusus mengikut pelan tindakan. Antara muka adalah serupa dengan kelas, tetapi kita tidak boleh menggunakannya untuk mencipta objek. Tujuan mereka adalah untuk menambah abstraksi ke Java. Lebih tepat lagi, mereka menambah fleksibiliti kepada hubungan antara kelas dan objek. Dengan fleksibiliti, kami maksudkan polimorfisme dan abstraksi yang diterangkan sebelum ini, yang mewujudkan banyak peluang untuk membina seni bina dalaman aplikasi.25. Apakah itu kelas POJO? Berikan contoh kelas sedemikian
POJO (Objek Java Lama Biasa) ialah objek kelas ringkas yang tidak mewarisi mana-mana kelas tertentu dan tidak melaksanakan sebarang antara muka perkhidmatan melebihi yang diperlukan untuk model perniagaan. Dengan kata lain, kelas POJO hanyalah kelas tanpa keperluan khas. Satu-satunya keperluan ialah ketiadaan pelbagai loceng dan wisel terikat pada rangka kerja tertentu. Sebagai peraturan, kelas ini tidak mewarisi kelas lain (kecuali kelas POJO dalam pakej yang sama), tidak melaksanakan antara muka (kadangkala pengecualian dibuat untuk antara muka penanda daripada perpustakaan standard seperti Serializable atau Cloneable ), jangan gunakan anotasi , dan tidak bergantung pada perpustakaan pihak ketiga. Mari kita ambil perhatian bahawa POJO boleh mempunyai kaedah yang mengandungi logik perniagaan dan pembina dalam apa jua bentuk. Jika kami membenarkan anotasi yang tidak mengubah semantik kelas (iaitu anotasi yang ketiadaannya tidak mengubah tujuan atau logik objek), maka POJO juga boleh memasukkan entiti JPA dan objek DTO yang dinyahsiri daripada XML atau JSON , yang peraturannya adalah dinyatakan dalam anotasi. Perkara lain yang perlu diingat mengenai kelas POJO ialah adalah baik untuk mengatasi kaedah yang sama dan Kod hash kerana ini boleh membantu mereka memenuhi peranan mereka dengan lebih baik. Contoh kelas POJO :public class User {
private Long id;
private String firstName;
private String lastName;
private Long age;
public User(final Long id, final String firstName, final String lastName, final long age) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public Long getId() {
return this.id;
}
public String getFirstName() {
return this.firstName;
}
public String getLastName() {
return this.lastName;
}
public Long getAge() {
return this.age;
}
@Override
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || this.getClass() != o.getClass()) return false;
final User user = (User) o;
return Objects.equals(this.id, user.id) &&
Objects.equals(this.firstName, user.firstName) &&
Objects.equals(this.lastName, user.lastName) &&
Objects.equals(this.age, user.age);
}
@Override
public int hashCode() {
return Objects.hash(this.id, this.firstName, this.lastName, this.age);
}
}
26. Apakah elemen yang boleh mengandungi kelas?
Kelas boleh mengandungi elemen berikut:- medan contoh;
- medan statik;
- blok permulaan;
- blok permulaan statik;
- pembina (pembina kosong sentiasa diisytiharkan secara lalai);
- kaedah;
- kaedah statik;
- pelbagai anotasi (yang boleh digunakan pada kelas itu sendiri atau bahagian konstituennya);
- generik ;
- pewarisan kelas lain ( extends ) atau pelaksanaan antara muka ( implements ).
27. Beritahu kami tentang warisan di Jawa. Apakah spesifikasi kata kunci super?
Di atas, saya sebelum ini bercakap tentang warisan dan kata kunci super di Jawa. Saya akan menyebut beberapa perkara penting:- Kita boleh mewarisi hanya satu kelas: Java tidak mempunyai warisan berbilang dalam Java. Dengan kemunculan kaedah lalai dalam Java 8, kenyataan ini akan menjadi sangat kontroversi.
- Kaedah dan medan persendirian juga diwarisi. Mereka tidak boleh diakses daripada kelas kanak-kanak (tetapi jika kita, sebagai contoh, mempunyai medan peribadi dan mempunyai pengambil dan penetap awam atau dilindungi , maka kita boleh menggunakannya untuk mengakses medan).
- kelas akhir tidak boleh diwarisi.
- kaedah akhir tidak boleh ditindih (tetapi ia boleh diwarisi dan terlebih beban).
- kaedah statik dan pembolehubah tidak diwarisi (kerana ia dilampirkan pada kelas, bukan objek).
- Apabila mewarisi kelas abstrak, kaedah abstrak mereka mesti dilaksanakan, atau kelas anak juga mesti diisytiharkan abstrak.
- Jika terdapat pembina bukan lalai dalam induk, ia mesti ditindih dalam kelas anak (tetapi @Override tidak ditulis di atasnya).
- Anda boleh melanjutkan pengubah suai akses kepada kaedah yang diganti dalam kelas kanak-kanak: private -> default -> protected -> public . Kaedah yang ditindih dalam kelas kanak-kanak boleh membuang pengecualian yang lebih sempit, contohnya: Exception -> IOException -> FileNotFoundException.
28. Apakah tandatangan kaedah? Berikan contoh tandatangan yang betul dan salah
Tandatangan kaedah ialah nama kaedah ditambah jenis parameter input (urutan parameter penting). Tandatangan kaedah tidak termasuk nilai pulangan atau pengecualian yang dilemparkan oleh kaedah. Contoh tandatangan yang betul:doSomething(int, double, double)
Contoh tandatangan yang salah:
void doSomething(int firstArg, int secondArg) throws Exception
Tandatangan kaedah, digabungkan dengan jenis pulangan dan senarai pengecualian yang dilemparkan, dipanggil kontrak kaedah . Itu sahaja untuk hari ini! Jumpa lagi!
GO TO FULL VERSION