Qual é o problema, onde aconteceu o problema e porquê o problema aconteceu. Quanto melhor a exceção responder a estas três perguntas mais útil ela será.
O que deu errado é transmitido no nome da própria classe que representa a exceção. Por exemplo, OutofMemoryError
significa que não há mais memória disponível; NumberFormatException
significa que o formato do numero é incorreto; FileNotFoundException
significa que o arquivo não foi encontrado. O nome da exceção é muito importante pois identifica o quê deu errado.
A razão do problema é explicado na mensagem contida na própria exceção e que pode ser obtido com getMessage()
. Essa explicação é textual e normalmente em inglês. É possível internacionalizar a mensagem, mas isso só é feito em casos em que a mensagem tem que ser apresentada ao usuário final.
O onde deu errado é respondido pelo stack trace que cada exceção pode obter e que revela em qual linha de qual classe o problema aconteceu.O stack trace mostra a hierarquia de todas as exceções que derivaram da exceção original. Caso seja necessário podemos navegar pelo stack trace para saber se um certo tipo de exceção aconteceu, ou simplesmente qual foi a excação que originou o problema.