Java: checked vs unchecked exception explanatio
He leído varias publicaciones en StackOverFlow sobre excepciones marcadas y no marcadas. Sinceramente, todavía no estoy muy seguro de cómo usarlos correctamente.
Joshua Bloch en " Java eficaz" dijo es
Utilice excepciones comprobadas para condiciones recuperables y excepciones de tiempo de ejecución para errores de programación (Elemento 58 en la 2da edición)
A ver si entiendo esto correctamente.
Aquí tengo entendido una excepción marcada:
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. ¿Lo anterior considera una excepción marcada?
2. ¿RuntimeException es una excepción no verificada?
Aquí tengo entendido una excepción no verificada:
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. Ahora, ¿no podría el código anterior también ser una excepción marcada? ¿Puedo intentar recuperar la situación así? ¿Puedo (Nota: mi tercera pregunta está dentro de lacatch
encima
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. ¿Por que las personas hacen esto
public void someMethod throws Exception{
}
¿Por qué dejan que la excepción brote? ¿No es mejor manejar el error antes? ¿Por qué burbujear?
EDIT: ¿Debería aumentar la excepción exacta o enmascararla con Exception?
Abajo están mis lecturas