9.3 Muitas e muitas Exception
As RuntimeExceptions
Claro, além de um for tentando acessar mais índices do que deveria e a tentativa de executarmos ações em referências nulas, existem diversas outras situações de risco em que a JVM lançará uma exception. Cada situação dessa tem uma forma (um tipo) forte de ser representada; conhecê-las pode ser muito importante para nosso diaa dia.
Veremos diversas dessas situações e diferentes tipos de Exception no decorrer deste capítulo e dos demais do livro, mas desde já é interessante entendermos que todos estes casos que vimos até agora poderiam facilmente ser evitados de forma simples pelo programador.
Conhecemos estes tipos de Exceptions como unchecked, pois o compilador não verifica (checa) se as estamos tratando. Em outras palavras, nosso código compilará com ou sem os try/catchs declarados.
As unchecked exceptions não herdam diretamente da classe Exception, mas sim de sua filha RuntimeException. Os casos mais comuns são:
Checked Exceptions
Diferente disso, quando estamos fazendo a leitura de um arquivo ou qualquer outra operação de risco que não pode ser facilmente evitada (o arquivo pode não existir, por exemplo) o compilador nos obriga a tratar esse código! Esse é um outro tipo de exception da linguagem, conhecida como checked exception.
Para testar, vamos escrever o seguinte código que realiza a leitura de um
arquivo que não existe. Não se preocupe com o código em si, entenderemos a API de IO (leitura e escrita) mais à frente. O ponto aqui é perceber que esse código não compila:
new java.io.fileinputStream(“arquivo.txt”);
O erro será “Unhandled exception type FileNotFoundException
. Note que o compilador checou que ela não está sendo tratada. Para que o código compile poderíamos fazer algo como:
try {
new java.io.fileinputStream(“arquivo.txt”);
} catch (FileNotFoundException el) { System.out.println(“Nao consegui abrir o arquivo”);
}