Joshua Bloch ใน " Effective Java " กล่าวว่า
ใช้ข้อยกเว้นที่ตรวจสอบแล้วสำหรับเงื่อนไขที่สามารถกู้คืนได้และข้อยกเว้นรันไทม์สำหรับข้อผิดพลาดในการเขียนโปรแกรม (รายการ 58 ในรุ่นที่ 2)
ลองดูว่าฉันเข้าใจสิ่งนี้ถูกต้องหรือไม่
นี่คือความเข้าใจของฉันเกี่ยวกับข้อยกเว้นที่ตรวจสอบ:
try{
String userInput = //read in user input
Long id = Long.parseLong(userInput);
}catch(NumberFormatException e){
id = 0; //recover the situation by setting the id to 0
}
1. ข้างต้นถือว่าเป็นข้อยกเว้นที่ตรวจสอบหรือไม่
2. RuntimeException เป็นข้อยกเว้นที่ไม่ได้ตรวจสอบหรือไม่?
นี่คือความเข้าใจของฉันเกี่ยวกับข้อยกเว้นที่ไม่ได้ตรวจสอบ:
try{
File file = new File("my/file/path");
FileInputStream fis = new FileInputStream(file);
}catch(FileNotFoundException e){
//3. What should I do here?
//Should I "throw new FileNotFoundException("File not found");"?
//Should I log?
//Or should I System.exit(0);?
}
4. ตอนนี้รหัสข้างต้นไม่สามารถเป็นข้อยกเว้นที่ตรวจสอบได้หรือไม่ ฉันสามารถกู้สถานการณ์เช่นนี้ได้หรือไม่? ให้ฉัน? (หมายเหตุ: คำถามที่ 3 ของฉันอยู่ด้านcatch
บน)
try{
String filePath = //read in from user input file path
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
}catch(FileNotFoundException e){
//Kindly prompt the user an error message
//Somehow ask the user to re-enter the file path.
}
5. ทำไมผู้คนถึงทำเช่นนี้?
public void someMethod throws Exception{
}
ทำไมพวกเขาปล่อยให้ฟองข้อยกเว้นขึ้นมา? การจัดการข้อผิดพลาดนั้นเร็วขึ้นหรือไม่ ทำไมฟองขึ้น?
6. ฉันควรทำให้มีข้อยกเว้นที่แน่นอนหรือปิดบังโดยใช้ข้อยกเว้น
ข้างล่างนี้คือการอ่านของฉัน
ใน Java ฉันควรสร้างข้อยกเว้นที่ตรวจสอบเมื่อใดและเมื่อใดควรเป็นข้อยกเว้นรันไทม์
DataSeries
คลาสที่เก็บข้อมูลซึ่งจะต้องอยู่ในลำดับตามเวลาเสมอ มีวิธีการที่จะเพิ่มใหม่คือการสิ้นสุดของการDataPoint
DataSeries
หากรหัสของฉันทั้งหมดทำงานอย่างถูกต้องตลอดทั้งโครงการ aDataPoint
ไม่ควรถูกเพิ่มไปยังจุดสิ้นสุดซึ่งมีวันที่ก่อนหน้าไปยังรหัสที่มีอยู่แล้วในตอนท้าย โมดูลทั้งหมดในโครงการทั้งหมดถูกสร้างขึ้นด้วยความจริงแท้นี้ อย่างไรก็ตามฉันจะตรวจสอบเงื่อนไขนี้และโยนข้อยกเว้นที่ไม่ได้ตรวจสอบหากเกิดขึ้น ทำไม? ถ้ามันเกิดขึ้นฉันต้องการรู้ว่าใครกำลังทำสิ่งนี้อยู่และแก้ไขมัน