JavaRush /Blog Java /Random-MS /10 Soalan Teratas tentang Pengecualian di Jawa
raynn
Tahap
Нижний Новгород

10 Soalan Teratas tentang Pengecualian di Jawa

Diterbitkan dalam kumpulan
Artikel itu menerangkan 10 soalan yang paling kerap ditanya tentang pengecualian di Jawa. 10 Soalan Teratas tentang Pengecualian dalam Java - 1

1. Boleh disahkan dan tidak boleh disahkan

Ringkasnya, pengecualian yang diperiksa mesti ditangkap secara eksplisit dalam badan kaedah atau diisytiharkan dalam bahagian lontaran kaedah. Pengecualian yang tidak disemak disebabkan oleh masalah yang tidak dapat diselesaikan, seperti pembahagian dengan 0, penunjuk nol, dsb. Pengecualian yang disemak amat penting kerana anda mengharapkan pembangun lain yang menggunakan API anda mengetahui cara mengendalikan pengecualian. Sebagai contoh, IOException ialah pengecualian bertanda yang biasa digunakan, manakala RuntimeException ialah pengecualian tidak bertanda. Sebelum membaca lebih lanjut, lihat Rajah Pengecualian Hierarki dalam Java .

2. Cara terbaik untuk menangani pengecualian

Jika pengecualian boleh dikendalikan dengan betul, ia mesti ditangkap, jika tidak, ia mesti dimajukan.

3. Mengapa pembolehubah yang ditakrifkan dalam percubaan tidak boleh digunakan dalam tangkapan atau akhirnya?

Dalam sekeping kod berikut, baris yang diisytiharkan dalam blok cuba tidak boleh digunakan dalam blok tangkapan. Kod ini tidak akan disusun.
try {
	File file = new File("path");
	FileInputStream fis = new FileInputStream(file);
	String s = "inside";
} catch (FileNotFoundException e) {
	e.printStackTrace();
	System.out.println(s);
}
Sebabnya ialah ia tidak diketahui di mana betul-betul di blok cuba pengecualian mungkin telah dilemparkan. Ada kemungkinan pengecualian dilemparkan sebelum objek diisytiharkan. Dan ini benar untuk contoh ini.

4. Mengapakah Double.parseDouble(null) dan Integer.parseInt(null) membuang pengecualian yang berbeza?

Betul, mereka membangkitkan pengecualian yang berbeza. Ini adalah isu JDK. Mereka direka semata-mata oleh orang yang berbeza, dan anda tidak perlu terlalu risau tentangnya.
Integer.parseInt(null);
// вызывает java.lang.NumberFormatException: null

Double.parseDouble(null);
// вызывает java.lang.NullPointerException

5. Pengecualian masa jalan asas dalam Java

Berikut adalah beberapa daripadanya:
IllegalArgumentException
ArrayIndexOutOfBoundsException
Ia boleh digunakan dalam pernyataan if apabila syarat tidak dipenuhi, seperti di sini:
if (obj == null) {
   throw new IllegalArgumentException("obj не может быть равно null");

6. Adakah mungkin untuk menangkap berbilang pengecualian dalam satu blok tangkapan?

Jawapannya YA. Selagi kelas pengecualian ini boleh dikesan sehingga hierarki warisan kelas kepada superclass yang sama, hanya superclass itu boleh digunakan.

7. Bolehkah pembina membuang pengecualian?

Jawapannya YA. Pembina hanyalah sejenis kaedah khas. Berikut adalah contoh kod.

8. Melontar pengecualian dalam blok akhir

Pada dasarnya, anda boleh melakukan ini secara sah:
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		try {
			FileInputStream fis = new FileInputStream(file2);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
Tetapi untuk mengekalkan kebolehbacaan kod, anda perlu mengisytiharkan blok bersarang try-catchsebagai kaedah baharu dan memasukkan panggilan ke kaedah ini ke dalam blok finally.
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		methodThrowException();
	}
}

9. Adakah mungkin untuk menggunakan return dalam blok akhirnya?

Ya awak boleh.

10. Mengapakah pembangun mengendalikan pengecualian secara senyap?

Sebagai contoh, kepingan kod sedemikian sering muncul. Jika pengendalian pengecualian yang betul adalah sangat penting, mengapa pembangun terus menulisnya dengan cara ini?
try {
     ...
} catch(Exception e) {
     e.printStackTrace();
}
Ia paling mudah untuk diabaikan. Tetapi walaupun ini sering dilakukan, ia tidak bermakna ia betul. Pautan:
  1. Pengecualian yang tidak disemak di Jawa
  2. Akar pokok pengecualian hierarki di Jawa
  3. Soalan tentang pengecualian pada stackoverflow
Artikel asal
Apa lagi yang perlu dibaca:

Pengecualian di Jawa

Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION