Em uma das minhas entrevistas, o entrevistador me fez uma pergunta sobre vários bloqueios de catch
. A pergunta era: Por que precisamos de outras classs filho de Exception
para manipular a exceção, se a class pai, ou seja, Exception
, sozinha puder manipular todas as outras exceções.
Existem diferentes vantagens de usar subclasss autodeclaradas de Exception ou RuntimeException:
Cito o tutorial básico do Oracle
“Na maioria das situações, no entanto, você deseja que os manipuladores de exceção sejam os mais específicos possíveis. O motivo é que a primeira coisa que um manipulador deve fazer é determinar que tipo de exceção ocorreu antes de decidir sobre a melhor estratégia de recuperação . não pegando erros específicos, o manipulador deve acomodar qualquer possibilidade. Os manipuladores de exceção que são muito genéricos podem tornar o código mais propenso a erros, capturando e manipulando exceções que não foram previstas pelo programador e para as quais o manipulador não foi planejado. ”
Veja aqui o texto completo: http://docs.oracle.com/javase/tutorial/essential/exceptions/advantages.html
Usamos as subclasss de exceção, como
FileNotFoundException
para que possamos exibir uma mensagem adequada.
Se usássemos apenas uma exceção, quando um aplicativo lançasse uma exceção, não saberíamos qual é a exceção.
Isso não seria muito bom para debugging. Usando as classs filho também nos ajuda a registrar melhor as exceções.
Porque nós podemos lidar com diferentes exceções de maneira diferente, como:
catch (FileNotFoundException e){ createNewFile(); } catch (IOException e){ System.out.println("Everything is bad("); }