JavaRush /จาวาบล็อก /Random-TH /คำถาม 10 อันดับแรกเกี่ยวกับข้อยกเว้นใน Java
raynn
ระดับ
Нижний Новгород

คำถาม 10 อันดับแรกเกี่ยวกับข้อยกเว้นใน Java

เผยแพร่ในกลุ่ม
บทความนี้จะอธิบายคำถามที่พบบ่อย 10 ข้อเกี่ยวกับข้อยกเว้นใน Java คำถาม 10 อันดับแรกเกี่ยวกับข้อยกเว้นใน Java - 1

1. ตรวจสอบได้และไม่สามารถตรวจสอบได้

กล่าวโดยสรุป ข้อยกเว้นที่ตรวจสอบจะต้องถูกจับอย่างชัดเจนในเนื้อหาของวิธีการหรือประกาศในส่วนการพ่นของวิธีการ ข้อยกเว้นที่ไม่ได้ตรวจสอบเกิดจากปัญหาที่ไม่สามารถแก้ไขได้ เช่น การหารด้วย 0 ตัวชี้ค่าว่าง ฯลฯ ข้อยกเว้นที่ตรวจสอบมีความสำคัญอย่างยิ่งเนื่องจากคุณคาดหวังให้นักพัฒนารายอื่นที่ใช้ API ของคุณรู้วิธีจัดการกับข้อยกเว้น ตัวอย่างเช่น IOException เป็นข้อยกเว้นที่ใช้โดยทั่วไป ในขณะที่ RuntimeException เป็นข้อยกเว้นที่ไม่ได้ตรวจสอบ ก่อนที่จะอ่านเพิ่มเติม โปรดดูที่Hierarchical Exception Diagram ใน Java

2. วิธีที่ดีที่สุดในการจัดการกับข้อยกเว้น

ถ้าสามารถจัดการข้อยกเว้นได้อย่างถูกต้อง จะต้องตรวจพบ มิฉะนั้น จะต้องส่งต่อ

3. เหตุใดจึงไม่สามารถใช้ตัวแปรที่กำหนดไว้ใน try ใน catch หรือสุดท้ายได้

ในโค้ดต่อไปนี้ บรรทัดที่ประกาศในบล็อก try ไม่สามารถใช้ใน catch block ได้ รหัสนี้จะไม่รวบรวม
try {
	File file = new File("path");
	FileInputStream fis = new FileInputStream(file);
	String s = "inside";
} catch (FileNotFoundException e) {
	e.printStackTrace();
	System.out.println(s);
}
เหตุผลก็คือ ไม่ทราบว่า try block อยู่ที่ไหนใน try block ข้อยกเว้นอาจถูกโยนทิ้งไป อาจเป็นไปได้ว่ามีข้อยกเว้นเกิดขึ้นก่อนที่จะมีการประกาศวัตถุ และนี่ก็เป็นจริงสำหรับตัวอย่างนี้

4. เหตุใด Double.parseDouble(null) และ Integer.parseInt(null) จึงมีข้อยกเว้นที่แตกต่างกัน

ถูกต้อง พวกเขายกข้อยกเว้นที่แตกต่างกันออกไป นี่เป็นปัญหาของ JDK พวกเขาได้รับการออกแบบโดยผู้คนที่แตกต่างกัน และคุณไม่ควรกังวลกับมันมากเกินไป
Integer.parseInt(null);
// вызывает java.lang.NumberFormatException: null

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

5. ข้อยกเว้นรันไทม์พื้นฐานใน Java

นี่คือบางส่วนของพวกเขา:
IllegalArgumentException
ArrayIndexOutOfBoundsException
สามารถใช้ในคำสั่ง if เมื่อไม่ตรงตามเงื่อนไข เช่น:
if (obj == null) {
   throw new IllegalArgumentException("obj не может быть равно null");

6. เป็นไปได้หรือไม่ที่จะตรวจจับข้อยกเว้นหลายรายการในบล็อก catch เดียว

คำตอบคือใช่ ตราบใดที่คลาสของข้อยกเว้นเหล่านี้สามารถติดตามลำดับชั้นการสืบทอดคลาสไปยังซูเปอร์คลาสเดียวกันได้ เฉพาะซูเปอร์คลาสนั้นเท่านั้นที่สามารถใช้ได้

7. Constructor สามารถส่งข้อยกเว้นได้หรือไม่?

คำตอบคือใช่ Constructor เป็นเพียงวิธีการพิเศษเท่านั้น นี่คือตัวอย่างโค้ด

8. โยนข้อยกเว้นในบล็อกสุดท้าย

โดยหลักการแล้ว คุณสามารถทำได้อย่างถูกกฎหมาย:
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();
		}
	}
}
แต่เพื่อรักษาความสามารถในการอ่านโค้ด คุณต้องประกาศบล็อกที่ซ้อนกันtry-catchเป็นวิธีการใหม่ และแทรกการเรียกเมธอดนี้ลงใน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. เป็นไปได้ไหมที่จะใช้ return ในบล็อกสุดท้าย?

ใช่คุณสามารถ.

10. เหตุใดนักพัฒนาจึงจัดการกับข้อยกเว้นอย่างเงียบๆ?

ตัวอย่างเช่น ชิ้นส่วนของโค้ดดังกล่าวมักจะปรากฏขึ้น หากการจัดการข้อยกเว้นที่เหมาะสมมีความสำคัญมาก เหตุใดนักพัฒนาจึงยังคงเขียนเช่นนี้ต่อไป
try {
     ...
} catch(Exception e) {
     e.printStackTrace();
}
ง่ายที่สุดที่จะเพิกเฉย แต่ถึงแม้จะทำบ่อยๆ แต่ก็ไม่ได้หมายความว่าถูกต้อง ลิงค์:
  1. ข้อยกเว้นที่ไม่ได้ตรวจสอบใน Java
  2. รากของแผนผังข้อยกเว้นแบบลำดับชั้นใน Java
  3. คำถามเกี่ยวกับข้อยกเว้นใน Stackoverflow
บทความต้นฉบับ
มีอะไรให้อ่านอีก:

ข้อยกเว้นใน Java

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION