Chapter VI - Exceptions Flashcards
Runtime exceptions sao tambem conhecidas como unchecked exceptions.
Exemplos de exceptions unchecked: NullPointerException e ArrayIndexOutOfBoundsException.
Checked exceptions sao as exceptions que eu me programei para lidar, fazendo uso de throw new SomeException().
Como separar unchecked exception, checked exception e error.
Unchecked eh uma subclasse de RuntimeException, nao precisa ser tratada ou declarada no codigo Checked eh uma subclass de Exception mas nao de RuntimeException, precisa ser declarada e/ou tratada no codigo. Error eh uma subclass de Error (mais improvavel de ocorrer na exceucao de um prgrama)
Ter atencao com UnreachableCodeExceptions. Elas irao ocorrer quando eu colocar na minha lista de catchs uma superclass antes de subclasses
Apenas um block catch ira ser executado caso o meu codigo contenha um erro.
Caso eu tenha um try-catch-finally block e dentro do meu catch eu lance outra exception, ainda assim o finally sera executado, nao esquecer disso.
Se:
dentro do meu catch eu lanco uma excecao e dentro do meu finally eu lanco outra excecao, apenas uma excecao sera lancada: a que eh lancada pelo block finally. Se meu bloco finally nao tiver nenhuma excecao em si, entao a exception lancada dentro do catch sera a utilizada.
Runtime Exceptions
ArithmeticException ArrayIndexOutOfBoundsException ClassCastException // quando eu tento fazer um cast que nao vai funcionar (um objeto que antes era string e agora eu quero fazer cast para Integer, por exemplo) IllegalArgumentException NullPointerException NumberFormatException
Checked Exceptions (O Java me obriga a declarar/tratar)
FileNotFoundException
IOException
*Declarar significa dizer que eu lanco a excecao, nao apenas digo que ela pode ser lancada. A diferenca entre essas duas coisas eh que para lancar eu faco: throw new Exception():
Dizer que ela pode ser lancada eh quando eu coloco ela na assinatura do metodo com: throws Exception();
Errors
ExceptionInInitializerError // quando algum erro ocorre dentro de um bloco initializer dentro de uma classe e ela, assim, nao consegue ser carregada pelo Java (tanto esse erro quanto a exception que ocasionou o erro sao lancadas no log)
StackOverflowError // metodo se chama eternamente
NoClassDefFoundError // Java nao pode encontrar a classe em runtime
Posso declarar tanto unchecked exceptions quando checked exceptions
O bloco try { } necessita de um bloco catch { } e/ou um block finally { }. Em outras palavras, apenas o bloco try { } sozinho nao ira compilar.
Se uma exception for lancada e eu nao pegar ela em nenhum bloco catch, o programa ira passar pelo bloco finally, mas depois ele nao continua o fluxo do restante do metodo que ele esta inserido.
Se eu lancar uma exception e ela nao for pegue em nenhum lugar, a execucao do meu metodo acaba ali e pronto (obvio). Nao existe continuacao de fluxo de execucao se eu lancei uma exception que nao foi caught em lugar algum.
Posso declarar um metodo que tenha o retorno Exception, mas nesse caso apenas o objeto sera retornado e nao uma excecao que sera lancada.