CodeGym /Blog Java /rawak /Meneroka soalan dan jawapan daripada temu duga kerja untu...
John Squirrels
Tahap
San Francisco

Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java. Bahagian 5

Diterbitkan dalam kumpulan
Hello Hello! Pembangun Java mendapat permintaan yang tinggi hari ini. Sudah tentu, saya tidak dapat memberikan anda peluang pekerjaan, tetapi saya akan cuba membantu anda memperoleh pengetahuan baharu dan mengisi beberapa kekosongan. Oleh itu, mari teruskan ulasan kami tentang soalan temu bual pembangun Java. Anda boleh mendapatkan pautan ke bahagian ulasan sebelumnya di penghujung artikel. Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 5 - 1

39. Apakah pengubah suai akses dalam Java? Namakan mereka. Untuk apa mereka digunakan?

Saya sebelum ini membincangkan pengubah suai akses dalam soalan tentang unsur-unsur Java yang digunakan untuk mencapai enkapsulasi. Tetapi tetap, saya akan mengingatkan anda. Pengubah suai akses dalam Java ialah kata kunci yang menerangkan tahap akses yang diberikan kepada komponen Java tertentu. Pengubah suai akses berikut wujud:
  • awam — elemen yang ditandakan dengan pengubah suai ini ialah awam. Dalam erti kata lain, medan dan kaedah dan kelas yang diisytiharkan dengan pengubah suai awam boleh dilihat oleh kelas lain dalam pakej mereka sendiri dan dalam pakej luaran;
  • dilindungi — elemen yang ditandakan dengan pengubah suai ini boleh diakses dari mana-mana sahaja dalam kelasnya sendiri dalam pakej semasa atau kelas terbitan, walaupun ia berada dalam pakej lain;
  • lalai (atau tiada pengubah suai sama sekali) digunakan secara tersirat apabila tiada pengubah akses ditunjukkan. Ia serupa dengan yang sebelumnya, kecuali ia kelihatan dalam kelas terbitan yang terdapat dalam pakej lain;
  • peribadi — ini adalah yang paling peribadi daripada semua pengubah suai. Ia membenarkan akses kepada elemen hanya dalam kelas semasa.

40. Namakan ciri-ciri utama kaedah statik dan bukan statik

Perbezaan utama ialah kaedah statik tergolong dalam kelas. Malah, anda tidak perlu mencipta contoh kelas ini — kaedah statik boleh dipanggil hanya dari jenis kelas. Sebagai contoh, katakan kita mempunyai kaedah statik untuk membelai kucing:
public class CatService {
   public static void petTheCat(Cat cat) {
       System.out.println("Pet the cat: " + cat.getName());
   }
Kami tidak memerlukan contoh kelas CatService untuk memanggilnya:
Cat cat = new Cat(7, "Bobby");
CatService.petTheCat(cat);
Sebaliknya, kaedah biasa terikat (kepunyaan) kepada objek. Untuk memanggil mereka, anda mesti mempunyai contoh (objek) di mana kaedah itu akan dipanggil. Sebagai contoh, katakan kucing kita mempunyai kaedah bukan statik meow() :
class Cat {
   public void meow() {
       System.out.println("Meow! Meow! Meow!");
   }
Untuk memanggil kaedah ini, kami memerlukan contoh khusus kucing:
Cat cat = new Cat(7, "Bobby");
cat.meow();

41. Apakah sekatan utama yang digunakan untuk kaedah statik dan bukan statik?

Seperti yang saya katakan sebelum ini, had utama kaedah biasa (bukan statik) ialah mesti sentiasa ada beberapa contoh di mana kaedah itu dipanggil. Tetapi kaedah statik tidak memerlukan ini. Selain itu, kaedah statik tidak boleh menggunakan rujukan ini kepada elemen objek memandangkan kini objek semasa wujud untuk kaedah tersebut.

42. Apakah maksud kata kunci statik? Bolehkah kaedah statik ditindih atau terlebih beban?

Elemen yang ditandakan dengan kata kunci statik bukan milik contoh kelas tetapi kelas itu sendiri. Ia dimuatkan apabila kelas itu sendiri dimuatkan. Elemen statik adalah sama untuk keseluruhan program, manakala elemen bukan statik adalah sama hanya untuk objek tertentu. Elemen berikut boleh menjadi statik:
  • bidang kelas;
  • blok permulaan kelas;
  • kaedah kelas;
  • kelas bersarang kelas (sudah tentu, ini juga tautologi).
Kaedah statik tidak boleh ditindih: ia tergolong dalam kelas dan tidak diwarisi, tetapi pada masa yang sama, ia boleh terlebih beban.

43. Bolehkah sesuatu kaedah menjadi statik dan abstrak pada masa yang sama?

Saya sudah menjawab ini dalam artikel sebelumnya: kaedah tidak boleh abstrak dan statik pada masa yang sama. Jika kaedah adalah abstrak, ini menunjukkan bahawa kaedah itu mesti ditindih dalam kelas kanak-kanak. Tetapi kaedah statik kepunyaan kelas, dan ia tidak boleh ditindih. Ini mewujudkan percanggahan, yang pengkompil akan perasan dan kecewa. Jika anda mendapati diri anda dalam situasi ini, anda harus memikirkan dengan serius tentang ketepatan seni bina aplikasi anda (petunjuk: ada sesuatu yang tidak kena dengannya). Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 5 - 2

44. Bolehkah kaedah statik digunakan di tengah-tengah kaedah bukan statik? Dan begitu juga sebaliknya? kenapa?

Kita boleh menggunakan kaedah statik dalam kaedah bukan statik. Tiada apa yang menghalangnya. Yang berkata, sebaliknya tidak mungkin: kaedah statik tidak boleh menggunakan kaedah bukan statik tanpa merujuk contoh tertentu kelas. Ingat, ahli statik kelas tidak mempunyai akses kepada rujukan ini : anda boleh mempunyai seberapa banyak objek konkrit kelas yang anda suka, dan setiap daripada mereka akan mengandungi rujukan ini , yang merupakan rujukan diri. Jadi bagaimana untuk menentukan rujukan ini untuk digunakan? Eh, awak tidak. Itulah sebabnya elemen statik tidak boleh merujuk kepada yang tidak statik tanpa merujuk kepada objek tertentu. Pada asasnya, kaedah statik boleh menggunakan kaedah bukan statik hanya jika ia mempunyai rujukan kepada objek tertentu. Sebagai contoh, satu yang datang sebagai hujah kaedah:
public static void petTheCat(Cat cat) {
   System.out.println("Pet the cat: " + cat.getName());
}
Di sini kita melihat bahawa dalam kaedah statik petTheCat() memanggil getName , kaedah bukan statik biasa bagi objek Cat .

45. Apakah antara muka? Bolehkah terdapat antara muka akhir?

Kami akan ingat bahawa Java tidak mempunyai banyak warisan. Antara muka adalah sesuatu alternatif kepadanya. Antara muka adalah seperti kelas yang sangat dilucutkan. Mereka mentakrifkan fungsi tetapi bukan pelaksanaan konkrit. Tugas itu diserahkan kepada kelas yang melaksanakan antara muka ini. Contoh antara muka:
public interface Animal {
    void speak();
}
Contoh pelaksanaan antara muka oleh kelas
class Cat implements Animal {

   @Override
   public void speak() {
       System.out.println("Meow! Meow! Meow!");
   }
}
Inilah perkara utama yang penting untuk diketahui tentang menggunakan antara muka:
  1. Kaedah antara muka hanya boleh mengandungi pengepala. Mereka mestilah tidak mempunyai badan kaedah tertentu, iaitu mereka mestilah abstrak (walaupun mereka tidak menggunakan kata kunci abstrak ). Terdapat pengecualian: kaedah statik dan kaedah lalai, yang memerlukan badan kaedah.

  2. Kelas boleh melaksanakan banyak antara muka (seperti yang saya katakan, antara muka adalah alternatif kepada pelbagai warisan). Nama antara muka dipisahkan dengan koma dalam pengepala kaedah: kelas Lion melaksanakan Animal, Wild .

  3. Antara muka dibuat menggunakan kata kunci antara muka .

  4. Apabila kelas melaksanakan antara muka, kami menggunakan kata kunci implement .

  5. Kelas yang melaksanakan antara muka tertentu mesti melaksanakan semua kaedah abstraknya, atau mesti mengisytiharkan dirinya sebagai abstrak.

  6. Tujuan utama menggunakan antara muka adalah untuk melaksanakan polimorfisme (untuk memberikan objek keupayaan untuk mengambil pelbagai bentuk).

  7. Sebagai peraturan, pengubah suai akses untuk kaedah tidak ditunjukkan dalam antara muka: ia terbuka secara lalai dan anda tidak boleh menentukan pengubah selain daripada public . Bermula dengan Java 9, anda boleh menggunakan pengubah suai peribadi pada kaedah.

  8. Secara lalai, pembolehubah antara muka adalah statik muktamad . Dalam erti kata lain, ia adalah pemalar — ia mesti sentiasa dimulakan secara langsung dalam antara muka.

  9. Anda tidak boleh membuat contoh antara muka.

Jawapan kepada soalan sama ada antara muka boleh menjadi muktamad, sudah tentu, tidak. Sesungguhnya, tujuan utama mempunyai antara muka adalah untuk mereka dilaksanakan. Dan seperti yang kita semua ingat dengan baik, pengubah suai terakhir pada peringkat kelas menjadikan kelas tidak boleh diwarisi, dan dalam kes antara muka - tidak boleh dilaksanakan. Mengapa kita memerlukan antara muka yang tidak boleh kita laksanakan dan gunakan? Anda betul — kami tidak akan melakukannya! Dan penyusun bersetuju. :) Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 5 - 3Sebenarnya, dengan pengenalan kaedah antara muka statik sejak Java 8, mungkin ada satu titik, tetapi ini tidak mengubah fakta bahawa antara muka tidak boleh muktamad. Saya hanya bercakap tentang antara muka dengan sangat dangkal, kerana ini adalah topik yang luas. Untuk lebih lanjut mengenai perkara ini, lihat artikel mengenai antara muka dalam Java dan perbezaan antara kelas abstrak dan antara muka .

46. ​​Di manakah medan statik boleh dimulakan?

Medan statik boleh dimulakan:
  • serta-merta selepas pengisytiharan, menggunakan tanda sama dengan ( = );
  • dalam blok permulaan statik;
  • dalam blok pemula bukan statik (tetapi anda perlu memahami bahawa setiap kali objek dicipta, medan statik akan ditimpa apabila blok pemula ini dilaksanakan;
  • dalam pembina kelas. Setiap kali pembina dipanggil (iaitu, setiap kali objek dicipta menggunakan pembina ini), medan akan ditimpa;
  • dalam kaedah statik;
  • dalam kaedah bukan statik;
  • dalam kelas statik dan bukan statik, tempatan dan tanpa nama bersarang.

47. Apakah kelas tanpa nama?

Kelas tanpa nama ialah kelas yang tidak mempunyai jenisnya sendiri. Apa yang saya cakapkan? Apabila kita bercakap tentang antara muka, saya menyebut bahawa anda tidak boleh membuat contoh objek: anda hanya boleh membuat contoh kelas yang melaksanakan antara muka. Bagaimana jika anda tidak mahu beberapa kelas melaksanakan antara muka tetapi memerlukan objek yang melaksanakan antara muka? Dan ini mungkin satu-satunya kegunaan objek. Dan anda tidak perlu membuat kelas pelaksanaan yang lengkap. Bagaimana anda akan melakukannya? betul! Dengan menggunakan kelas tanpa nama! Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 5 - 4Katakan kita mempunyai beberapa antara muka Haiwan :
public final interface Animal {
   public void speak();
}
Jika kita ingin menggunakan kelas tanpa nama untuk membuat contoh antara muka yang diberikan:
Animal cat = new Animal() {
   @Override
   public void speak() {
       System.out.println("Meow! Meow! Meow!");
   }
};
Dan kemudian, anda boleh menggunakan objek ini dengan selamat dan kaedah speak() yang dilaksanakan . Dalam erti kata lain, kelas tanpa nama melaksanakan antara muka dan semua kaedah abstraknya, di sini dan sekarang. Jika tidak, kami tidak akan dapat mencipta antara muka/objek kelas abstrak kerana akan ada kaedah yang tidak dilaksanakan/abstrak. Seperti yang saya nyatakan, kelas tanpa nama digunakan bukan sahaja untuk melaksanakan kaedah abstrak antara muka tetapi juga untuk melaksanakan kaedah abstrak kelas abstrak. Pendekatan ini bagus untuk situasi apabila objek digunakan sekali atau apabila pelaksanaan kaedah tertentu diperlukan sekali sahaja. Tidak perlu mencipta kelas berasingan yang akan melaksanakan kelas/antara muka abstrak yang diperlukan. Tetapi saya juga ambil perhatian bahawa kelas tanpa nama jarang digunakan dalam kerja. Sebagai peraturan, kelas biasa masih diberi keutamaan. Anda boleh membaca lebih lanjut tentang kelas tanpa nama di sini dalam artikel ini .

48. Apakah itu kelas primitif?

Saya fikir ini adalah soalan yang mengelirukan, mungkin soalan helah, kerana Java tidak mempunyai kelas primitif. Terdapat hanya konsep jenis primitif, yang kami pertimbangkan sebelum ini. Kami ingat bahawa Java mempunyai 8 jenis primitif: byte , short , int , long , float , double , char , boolean .

49. Apakah kelas pembalut?

Masalah utama menggunakan jenis primitif dalam Java ialah ia bukan kelas, dan Java ialah bahasa OOP. Iaitu, program yang ditulis dalam bahasa ini berjumlah interaksi antara objek. Tetapi primitif bukan objek. Mereka tidak mempunyai kaedah, malah kaedah standard kelas Objek . Tetapi bagaimana jika kita perlu menggunakan primitif sebagai kunci dalam Peta ? Kemudian kita perlu memanggil kaedah hashCode() nya . Anda juga boleh memanggil kaedah equals() di sana. Selepas itu, apa? Terdapat banyak masa di mana anda memerlukan kelas, bukan primitif. Ini menjadikan elemen primitif tidak boleh digunakan dan tidak diingini dalam program kerana ia melanggar idea OOP. Tetapi keadaannya tidaklah seteruk yang disangka. Lagipun, Java mempunyai konsep pembalut primitif. Di Jawa, setiap jenis primitif mempunyai kembar — kelas pembalut.
  • byte -> Byte.class
  • pendek -> Pendek.kelas
  • int -> Integer.class
  • panjang -> Panjang.kelas
  • terapung -> Terapung.kelas
  • double -> Double.class
  • char -> Character.class
  • boolean -> Boolean.class
Jenis ini mewakili jenis mudah, tetapi dalam kelas lengkap dengan sekumpulan kaedah yang pelbagai dan membantu. Konsep autoboxing dan unboxing telah diperkenalkan untuk membolehkan kelas ini digunakan dengan mudah. Autoboxing ialah penukaran automatik jenis primitif kepada kelas analognya, jika perlu (contohnya, menukar int kepada Integer ). Menyahkotak adalah proses yang bertentangan: penukaran automatik kelas pembalut primitif kepada jenis primitif (contohnya, menukar Integer kepada int ). Terima kasih kepada pengenalan kelas pembalut primitif dan proses autoboxing dan unboxing , jenis primitif kini menjadi ahli sepenuhnya Java sebagai bahasa OOP. Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 5 - 5Untuk perbincangan yang lebih mendalam tentang topik ini, saya amat mengesyorkan membaca artikel ini .

50. Apakah kelas bersarang? Di mana ia digunakan?

Kelas bersarang ialah kelas yang sendiri merupakan ahli kelas lain. Terdapat 4 jenis kelas bersarang ini di Jawa: 1. Kelas dalaman Kelas jenis ini diisytiharkan terus dalam badan kelas lain. Kelas dalam ialah kelas bersarang bukan statik dan boleh mengakses mana-mana medan peribadi atau kaedah contoh kelas luar. Sebagai contoh, mari kita buat zoo yang mengandungi haiwan — seekor kuda belang:
public class Zoo {
   class Zebra {
       public void eat(String food) {
           System.out.println("Zebra eats " + food);
       }
   }
}
Tidak rumit, bukan? Mari kita lihat contoh membuat contoh kelas dalam:
Zoo.Zebra zebra = new Zoo().new Zebra();
zebra.eat("apple");
Seperti yang telah anda lihat, pertama sekali perlu mencipta objek kelas yang disertakan. Kemudian anda menggunakan rujukan objek untuk membuat contoh kelas dalam. Saya juga ingin menyatakan bahawa kelas dalam (kelas bersarang bukan statik) tidak boleh mempunyai kaedah statik atau medan statik. Ini adalah tepat kerana kelas dalam dikaitkan secara tersirat dengan contoh kelas luarnya, dan oleh itu tidak boleh mengisytiharkan sebarang kaedah statik dalam dirinya. 2. Kelas bersarang statik Kelas ini adalah serupa dengan kategori sebelumnya, tetapi mereka mempunyai pengubah akses statik dalam pengisytiharan kelas. Memandangkan kelas jenis ini tidak mempunyai akses kepada medan bukan statik kelas luar, ia kelihatan lebih seperti bahagian statik kelas luar daripada kelas dalam. Tetapi kelas ini mempunyai akses kepada semua ahli statik kelas luar, malah kelas peribadi. Contoh kelas bersarang statik:
public class Zoo {
   static class Zebra {
       public void eat(String food) {
           System.out.println("Zebra eats " + food);
       }
   }
}
Ia dicipta dengan sedikit berbeza daripada yang sebelumnya:
Zoo.Zebra zebra = new Zoo.Zebra();
zebra.eat("apple");
Di sini kita tidak memerlukan objek kelas luar untuk mencipta objek kelas bersarang statik. Kita hanya perlu mengetahui nama kelas bersarang untuk mencarinya dalam kelas luar. 3. Kelas tempatan Kelas tempatan ialah kelas yang diisytiharkan di dalam badan kaedah. Objek kelas tempatan boleh dibuat dan digunakan hanya dalam kaedah melampirkan. Contoh:
public class Zoo {
   public void feed(String animal, String food) {
       switch(animal) {
           case "zebra":
               class Zebra {
                   public void eat(String food) {
                       System.out.println("Zebra eats " + food);
                   }
               }
               Zebra zebra = new Zebra();
               zebra.eat(food);
               ...
Berikut ialah contoh:
Zoo zoo = new Zoo();
zoo.feed("zebra", "apple");
Jika anda tidak melihat kod untuk kaedah suapan() , maka anda tidak akan mengesyaki bahawa kelas tempatan wujud, bukan? Kelas tempatan tidak boleh statik atau sementara , tetapi ia boleh ditandakan sebagai abstrak atau muktamad (satu ATAU yang lain, tetapi bukan kedua-duanya, kerana secara serentak menggunakan kedua-dua pengubah suai ini mewujudkan konflik). 4. Kelas tanpa nama Kami telah membincangkan tentang kelas tanpa nama di atas, dan seperti yang anda ingat, mereka boleh dibuat daripada dua sumber — antara muka dan kelas. Sebab untuk menggunakannya Kelas statik dan bukan statik bersarang digunakan kerana kadangkala adalah lebih baik untuk membenamkan kelas kecil dalam kelas yang lebih umum dan menyimpannya bersama supaya mereka mempunyai perpaduan yang lebih tinggi dan tujuan yang sama. Pada asasnya, kelas bersarang membolehkan anda meningkatkan enkapsulasi kod anda. Anda mungkin memilih untuk menggunakan kelas tempatan jika kelas itu digunakan secara eksklusif dalam satu kaedah. Dalam kes ini, adakah kita perlu menyebarkan kod ke atas aplikasi? Tidak. Yang berkata, saya akan menambah bahawa dalam pengalaman saya, saya tidak pernah melihat sesiapa menggunakan kelas tempatan, kerana sama ada mereka diperlukan atau tidak adalah sangat kontroversi. Anda mungkin menggunakan kelas tanpa nama apabila pelaksanaan khusus antara muka atau kelas abstrak diperlukan sekali sahaja. Dalam kes itu, tidak perlu mencipta kelas yang berasingan dan lengkap dengan pelaksanaan. Sebaliknya, kami menjadikannya mudah dan melaksanakan kaedah yang kami perlukan menggunakan kelas tanpa nama, menggunakan objek, dan kemudian melupakannya (sudah tentu, pemungut sampah tidak lupa). Pemahaman anda tentang kelas bersarang akan dipertingkatkan dengan artikel di sini.

51. Apakah pengubah akses yang boleh dimiliki oleh kelas?

Terdapat jenis kelas yang berbeza dan pengubah suai akses yang berbeza digunakan untuk mereka:
  • kelas luar boleh mempunyai pengubah akses awam atau tiada pengubah sama sekali (pengubah suai lalai);
  • kelas dalam (kelas bersarang bukan statik) boleh mempunyai mana-mana satu daripada 4 pengubah akses;
  • kelas statik bersarang boleh mempunyai mana-mana satu pengubah akses kecuali dilindungi kerana pengubah suai ini membayangkan pewarisan, yang bercanggah dengan mana-mana ahli statik kelas (ahli statik tidak diwarisi);
  • kelas tempatan hanya boleh mempunyai pengubah suai lalai (iaitu tiada pengubah suai sama sekali);
  • kelas tanpa nama tidak mempunyai pengisytiharan kelas, jadi ia tidak mempunyai pengubah akses sama sekali.
Di sinilah kita akan berakhir untuk hari ini. Jumpa lagi!Meneroka soalan dan jawapan daripada temu duga kerja untuk jawatan pembangun Java.  Bahagian 5 - 6
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION