1. throw
ตัวดำเนินการ
เมื่อข้อยกเว้นถูกจับโดยcatch
บล็อก และจนกว่าจะถูกส่งไปยังเครื่อง Java มันก็เป็นเพียงวัตถุที่สืบทอดมาException
(หรือมากกว่านั้นThrowable
) วัตถุยกเว้นเองไม่มีคุณสมบัติวิเศษใดๆ
ตรรกะทั้งหมดของวิธีการทำงานของข้อยกเว้นเป็นเพียงวิธีพิเศษที่เครื่อง Java ทำงานเมื่อมีข้อยกเว้นเกิดขึ้น
คุณสามารถสร้างข้อยกเว้นที่จับได้ใหม่ให้กับเครื่อง Java ได้เสมอ ในการทำเช่นนี้คุณต้องใช้throw
ตัวดำเนินการ:
throw exception;
ตัวอย่าง:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
ในโค้ดนี้ เราพบข้อยกเว้น แสดงข้อความเกี่ยวกับข้อยกเว้นนั้นบนหน้าจอ แล้วเขียนใหม่อีกครั้ง
catch
บล็อกอื่นในtry
บล็อก เดียวกัน ไม่สามารถจับข้อยกเว้นที่ถูกโยนใหม่ได้
2. ข้อยกเว้นของคุณ
ยังไงก็ตาม คุณสามารถสร้างวัตถุยกเว้นได้ด้วยตัวคุณเอง: มันเป็นเพียงวัตถุที่มีประเภทException
หรือคลาสที่สืบทอดมา และโยนมัน
มันง่ายกว่าที่คิด ตัวอย่าง:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
ในตัวอย่างข้างต้น เราสร้างวัตถุยกเว้นใหม่ที่มีประเภทRuntimeException
และโยนทิ้งทันทีโดยใช้throw
ตัวดำเนินการ
จะถูกบล็อกทันทีcatch
เนื่องจาก RuntimeException สืบทอดException
มา รหัสcatch (Exception except)
จับวัตถุยกเว้นของทุกชั้นที่สืบทอดException
ชั้น
3. finally
คำหลัก
อีกจุดสำคัญ บางครั้งโปรแกรมเมอร์จำเป็นต้องดำเนินการบางอย่างโดยไม่คำนึงว่าจะมีข้อยกเว้นเกิดขึ้นในรหัสหรือไม่ ตัวอย่างเช่น สมมติว่าเราเปิดไฟล์สำหรับเขียน ไฟล์ที่เปิดจะต้องปิดโดยการโทรclose()
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
finally
{
// Code that must executed no matter what happens
}
ในการดำเนินการบังคับเหล่านี้ บล็อกชนิดอื่น ( finally
) ถูกเพิ่มเข้าไปในtry-catch
โครงสร้าง ดังนั้นการสร้างtry-catch-finally
โครงสร้าง ดูเหมือนว่า:
ตัวอย่าง:
FileInputStream source = null;
try
{
source = new FileInputStream("c:\\note.txt");
source.read();
}
catch(Exception except)
{
System.out.println("Caught the exception");
throw except;
}
finally
{
if (source != null)
source.close();
}
รหัสในfinally
บล็อก จะดำเนินการในกรณีใด ๆ โดยไม่คำนึงว่าจะมีข้อยกเว้นหรือไม่ แม้ว่าข้อยกเว้นจะถูกส่งออกไปและไม่ถูกตรวจจับfinally
บล็อกจะยังคงดำเนินการอยู่
อย่างไรก็ตาม หากคุณไม่ต้องการตรวจจับข้อยกเว้น แต่คุณต้องการบล็อก ให้finally
ใช้เครื่องหมายชวเลขสำหรับtry-catch-finally
โครงสร้าง: a try-finally
block ดูเหมือนว่า:
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION