Joshua Bloch dalam " Java Efektif " mengatakan itu
Gunakan pengecualian yang dicentang untuk kondisi yang dapat dipulihkan dan pengecualian runtime untuk kesalahan pemrograman (Butir 58 dalam edisi kedua)
Mari kita lihat apakah saya mengerti ini dengan benar.
Inilah pemahaman saya tentang pengecualian yang diperiksa:
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. Apakah hal di atas dianggap sebagai pengecualian yang diperiksa?
2. Apakah RuntimeException merupakan pengecualian yang tidak dicentang?
Inilah pemahaman saya tentang pengecualian yang tidak dicentang:
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. Sekarang, bukankah kode di atas juga bisa menjadi pengecualian yang diperiksa? Saya dapat mencoba memulihkan situasi seperti ini? Bisakah saya? (Catatan: pertanyaan ketiga saya ada di dalam di catch
atas)
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. Mengapa orang melakukan ini?
public void someMethod throws Exception{
}
Mengapa mereka membiarkan pengecualian muncul? Bukankah penanganan kesalahan lebih cepat lebih baik? Mengapa menggembung?
6. Haruskah saya menggembungkan pengecualian yang tepat atau menyembunyikannya menggunakan Pengecualian?
Di bawah ini adalah bacaan saya
Kapan memilih pengecualian yang dicentang dan tidak dicentang
DataSeries
kelas yang menyimpan data yang selalu harus tetap dalam urutan berdasarkan waktu. Ada metode untuk menambahkan yang baruDataPoint
ke akhir aDataSeries
. Jika semua kode saya berfungsi dengan baik di seluruh proyek,DataPoint
jangan pernah ditambahkan ke bagian akhir yang memiliki tanggal sebelumnya dengan yang sudah ada di bagian akhir. Setiap modul di seluruh proyek dibangun dengan disangkal ini. Namun, saya memeriksa kondisi ini dan melemparkan pengecualian yang tidak dicentang jika itu terjadi. Mengapa? Jika itu terjadi, saya ingin tahu siapa yang melakukan ini dan memperbaikinya.