Exceptions Flashcards
O que são checked Exceptions?
Basicamente podemos ter dois tipos de exceções. As checadas e as não checadas.
Quando envolvemos um método em um try catch, ou um throws é uma checked exception. Pois declaramos a possibilidade de ocorrer uma exceção ali. Por exemplo tentar acessar um arquivo que não existe.
Inclui todas as exceções e suas subclasses que não extendem RuntimeException.
Tendem a ser mais antecipáveis, como por exemplo tentar ler um arquivo que não existe.
O que são unchecked exceptions?
As unchecked exceptions são aquelas que podem surgir durante a execução do código, como tentar acessar uma posição inválida de um array.
Uma Runtime Exception tende a ser inesperada mas não necessariamente fatal. Por exemplo acessar uma posição invalida de um array.
Como uma exceção pode ser lançada?
O código lança uma exceção:
String[] animals = new String[0];
System.out.println(animals[0]);
Ssolicitando que uma exceção seja lançada: throw new Exception(); throw new Exception("Ow! I fell."); throw new RuntimeException(); throw new RuntimeException("Ow! I fell.");
Quando o bloco Catch não é obrigatório?
Quando existir um finally. try { fall(); } finally { System.out.println("all better"); }
try { // DOES NOT COMPILE
fall();
}
Quando o bloco finally é executado?
O bloco finally é sempre executado. Mesmo quando uma exceção não é lançada.
void explore() { try { seeAnimals(); fall(); } catch (Exception e) { getHugFromDaddy(); } finally { seeMoreAnimals(); } goHome(); }
Como usar dois blocos catch em um bloco try?
public void visitPorcupine() { try { seeAnimal(); } catch (AnimalsOutForAWalk e) {// first catch block System.out.print("try back later"); } catch (ExhibitClosed e) { // second catch block System.out.print("not today"); } }
Uma exceção que herda de RunTimeException é checked ou unchecked?
Unchecked
Uma Runtime Exception tende a ser inesperada mas não necessariamente fatal. Por exemplo acessar uma posição invalida de um array.
Quando uma exceção é inacessível?
Java trata as exceções na ordem que elas aparecem. Se for impossível acessar um bloco catch, o código não compila.
Isso pode acontecer quando o primeiro bloco catch é mais amplo que o segundo.
O que acontece se uma exceção é inacessível?
Java trata as exceções na ordem que elas aparecem. Se for impossível acessar um bloco catch, o código não compila.
Isso pode acontecer quando o primeiro bloco catch é mais amplo que o segundo.
O que acontece quando se declara um catch mas não existe um throw para aquele catch?
Declarar uma exceção que nunca é usada também é considerado unreachable code.
Quais são os três tipos de exceções que é cobrado na prova?
Runtime Exception
Checked Exception
Erro
O que é uma Runtime Exception
São excelções que podem aparecer na hora da execução.
São as unchecked exceptions.
Este tipo de exceção estende de RuntimeException. Elas podem ser lançadas pela JVM ou pelo programador.
O que é uma checked exception
As checked Exceptions herdam da classe Exceptions, mas não de RuntimeExceptions. Elas devem ser declaradas a mão.
O que são erros?
Errors estendem a classe Error. Eles são lançados pela JVM.
São usados pela JVM para lançar uma exceção que não tem nada a ver com o código em si, mas sim com o ambiente.
Por exemplo OutOfMemoryError.
Erros podem Indicar um problema
grave que o programa não deve tentar tratar capturar usando um try catch.
StackOverflowError
Quando java chama um método, ele coloca os parâmetros em uma pilha(stack). Se esta pilha encher ou transbordar(overflow) uma exceção é lançada.
Na maioria das vezes quando isso acontece é porque um método chamou a ele mesmo:
public static void doNotCodeThis(int num) {
doNotCodeThis(1);
}
NoClassDefFoundError
Este erro ocorre quando uma classe estava disponível na hora da compilação mas não está disponível na hora da execução.
IOException
Checked Exception
Lançada quando se tem problema ao tentar ler ou escrever em um arquivo.
FileNotFoundException
Checked Exception
Lançada quando o código tenta fazer referencia a um arquivo que não existe.
A classe FileNotFoundException herda de qual classe?
FileNotFoundException é uma subclasse de IOException.
ArithmeticException
Lançada pela JVM quando o código tenta fazer uma divisão por zero.
int answer = 11 / 0;
ArrayIndexOutOfBoundsException
Lançado pela JVM quando o código tenta acessar uma posição inválida em um array.
int[] countsOfMoose = new int[3];
System.out.println(countsOfMoose[-1]);
ClassCastException
Lançado pela JVM quando se tenta fazer um cast impossível:
O código abaixo não compila:
String type = “moose”;
Integer number = (Integer) type; // DOES NOT COMPILE
NullPointerException
Lançado pela JVM quando se faz uma referencia à null quando um objeto é requerido:
String name;
public void printLength() throws NullPointerException {
System.out.println(name.length());
}
NumberFormatException
ançado pela JVM quando se tenta converter uma String para um tipo numérico, mas a String não tem o formato necessário.
Integer.parseInt(“abc”);
Quando uma classe filha pode lançar uma exceção?
Somente quando a classe pai lançar uma exceção mais abrangete.
A exceção da classe filha nunca pode ser mais abrangente que a da classe pai.
O método main pode lançar uma exceção?
Sim
Qualquer método pode lançar exceção.
O que acontece com exceções não capturadas?
Se uma exceção não for capturada, a Thread será encerrada. E qualquer resquício de código não será executado.
A execução normal de um método não é retomada caso uma exceção seja lançada. A exceção será propagada na pilha de metodos que o invocou até que um método a capture ou a JVM termine a thread.
IllegalArgumentException
Normalmente lançada pelo usuário.
Pode ser usada para validar valores que não estão de acordo com os parâmetros do método.
Por exemplo, o código abaixo recebe um inteiro com tamanho até 100:
public static void meuMetodoTeste(int param1){
if (param1 > 100){
throw new IllegalArgumentException
(“O param1 não pode ser maior que 100,
viola a integridade da aplicação”);
}
}