JavaRush /Blog Java /Random-MS /Terjemahan: 6 Pengecualian Java yang melanda pendatang ba...
profeg
Tahap

Terjemahan: 6 Pengecualian Java yang melanda pendatang baru ke Java.

Diterbitkan dalam kumpulan

6 Pengecualian Java yang menghantui pemula Java.

(Asal) (Saya baru dalam bahasa Jawa dan Inggeris, jadi saya berbesar hati menerima kritikan dan bantuan) Sebelum ini dan sekarang, saya terjumpa ramai pemula Java yang mempunyai masalah dengan beberapa pengecualian biasa yang perlu saya jelaskan sekali lagi. Saya percaya pembangun Java Kanan yang lain mempunyai masalah yang sama cuba membantu pemula menangani pengecualian ini. Justeru, saya menulis artikel ini untuk perkembangan saya sendiri. Sila berasa bebas untuk mengulas pada artikel ini atau menambah pengecualian pada senarai di bawah.
1. NoClassDefFoundError
Ini adalah salah satu daripada pengecualian tersebut, dengan mesej seperti “Pengecualian dalam utas “utama” NoClassDefFoundError” , yang kebanyakan pembangun Java baharu hadapi dalam dunia pengaturcaraan Java. Seorang pemula menulis program yang memaparkan "Hello world!", pergi ke baris arahan, taip "java ...", tekan enter dan BAM! =). Dan memikirkan cara untuk mendapatkan program untuk mencetak "Hello world!" pada monitor, mengambil sedikit masa. NoClassDefFoundError berlaku apabila Mesin Maya Java (JVM) cuba mengakses kelas pada masa permulaan dan kelas tidak ditemui, walaupun kelas yang sama ditemui pada masa penyusunan. Selalunya pengecualian ini berlaku apabila cuba melaksanakan program menggunakan arahan "java" dan laluan kelas tidak ditetapkan dengan betul. Berikut ialah penerangan tentang sebab pengecualian ini berlaku.
  • Kelas tidak tersedia dalam -classpath.
  • Pembolehubah persekitaran CLASSPATH telah dibatalkan. Anda boleh menyemak kehadiran dan ketepatannya menggunakan arahan Windows "set".
Penyelesaian masalah diterangkan dengan lebih terperinci di sini.
Selain itu, anda perlu memahami perbezaan antara pembolehubah persekitaran CLASSPATH dan kunci penterjemah -classpath. Profesional tidak mengesyorkan menggunakan CLASSPATH. Cara terbaik ialah dengan menghantar kunci -classpath kepada penterjemah.
2. ClassNotFoundException
ClassNotFoundException ialah satu lagi pengecualian yang menjadi mimpi ngeri bagi seorang pemula sebaik sahaja dia memulakan pengaturcaraan. Menariknya, purata pembangun Java sering keliru antara pengecualian ClassNotFoundException dan NoClassDefFoundError . Oleh itu, perbezaan antara dua pengecualian ini kekal sebagai salah satu soalan yang paling kerap ditanya dalam temu duga untuk jawatan Junior . ClassNotFoundException berlaku apabila JVM cuba memuatkan kelas tertentu dan tidak menemuinya dalam laluan kelas. Salah satu tempat biasa di mana pembangun Java baharu menemuinya buat kali pertama ialah menyambung ke pangkalan data menggunakan perpustakaan JDBC. Di sana kami akan cuba memuatkan pemandu menggunakan kod seperti Class.forName("JDBCdriver"). Artikel yang bagus tentang ClassNotFoundException ada di sini . Cuba memahami konsep Java Classloaders adalah kaedah paling berkesan untuk menangani masalah ini. Anda boleh membaca cara mengkonfigurasi Java classpath dalam Win/Unix environment . Seperti yang dinyatakan dalam java docs , pengecualian berlaku dalam kes berikut:
  • Anda cuba memuatkan kelas menggunakan kaedah Class.forName dan fail .class tiada dalam classpath. Ini adalah senario yang paling biasa daripada tiga yang disenaraikan di sini.
  • Apabila pemuat kelas cuba memuatkan kelas menggunakan loadClass.
  • Apabila pemuat kelas cuba memuatkan kelas menggunakan findSystemClass.
3. NullPointerException
Pengecualian ini lebih mudah difahami oleh pemula daripada dua yang pertama. Selain itu, pengecualian ini mudah dikenal pasti kerana apabila ia berlaku, mesej tentang pengecualian menunjukkan nombor baris dalam program tempat ia berlaku. Pengecualian ini berlaku apabila JVM cuba mengakses objek atau cuba memanggil kaedah pada objek dan menerima null dan bukannya rujukan kepada objek. Dokumen Java juga menyatakan sebab berikut:
  • Mengakses atau menukar kaedah pada objek yang tidak sah. (iaitu, bukannya rujukan kepada objek JVM, ia menjadi batal)
  • Mendapatkan panjang tatasusunan apabila ia tidak sah. (tidak dimulakan sebagai contoh)
  • Percubaan telah dibuat untuk mengakses elemen tatasusunan yang tidak wujud jenis Objek. (iaitu apabila, bukannya rujukan objek, elemen tatasusunan mengandungi null)
Kaedah paling mudah untuk mengelakkan pengecualian ini adalah dengan menggunakan semakan bukan NULL. Walau bagaimanapun, lambat laun, ini menjadi amalan pembangunan Java dan anda akan menemui semakan bukan NULL di mana-mana. Menariknya, memasukkan semakan bukan NULL di merata tempat tidak dianggap sebagai gaya pengaturcaraan yang baik . Dan sebab utama untuk menggunakan semakan bukan NULL ialah pembangun mahu lulus objek nol sekiranya berlaku kegagalan atau ralat. Sebaliknya, ini adalah amalan pengaturcaraan yang baik yang harus digunakan oleh pengaturcara untuk mengembalikan objek kosong, bukannya nilai nol , sebagai logik asas untuk bagaimana program akan bertindak sekiranya berlaku ralat. Walau bagaimanapun, mengamalkan amalan pengaturcaraan ini adalah lebih sukar daripada yang kelihatan.
Terdapat artikel yang bagus tentang ini pada sumber kami.
4. ClassCastException
Ini adalah satu lagi pengecualian yang biasa kepada pemula, yang berlaku apabila cuba menghantar objek ke kelas yang bukan subkelasnya. Sekali lagi, ini agak mudah untuk difahami, dikenal pasti dan mudah untuk diperbaiki. Satu cara untuk mengelakkan pengecualian ini apabila jenis objek tidak diketahui semasa runtime adalah dengan menggunakan "InstanceOf" untuk menyemak sama ada objek itu adalah contoh kelas tertentu.
5. ArrayIndexOutOfBoundsException
Pengecualian ini menerangkan sendiri dan berlaku apabila JVM cuba mengakses elemen tatasusunan dengan indeks yang tidak wujud, seperti negatif (-1) atau lebih besar daripada atau sama dengan saiz tatasusunan. Ia agak mudah untuk difahami, ditakrifkan dan diperbetulkan . Sebagai contoh, apabila mencipta gelung, for (i = 0; i <= cmd_stack.length; i++) System.out.println(cmd_stack[i]); pengecualian berlaku, kerana dalam tatasusunan indeks bermula dari 0, dan kaedah panjang mengembalikan bilangan elemen, dan nombornya adalah 1 lebih besar daripada nilai indeks terakhir. Penggunaan yang betul for (i = 0; i < cmd_stack.length; i++) System.out.println(cmd_stack[i]);
6. IllegalArgumentException
Pengecualian ini kurang biasa dan agak mudah difahami, dikenal pasti dan diselesaikan. Ia berlaku apabila JVM cuba memanggil kaedah yang tidak wujud, atau kaedah dengan hujah yang tidak sah.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION