Dado o código abaixo:
63. try {
64. // algum código neste trecho
65. } catch (NullPointerException e1) {
66. System.out.print(“a”);
67. } catch (RuntimeException e2) {
68. System.out.print(“b”);
69. } finally {
70. System.out.print(“c”);
71. }
Qual o resultado obtido se ocorrer a exceção NullPointerException na linha 64?
A. c
B. a
C. ab
D. ac
E. bc
F. abc
A ordem das exceções NullPointerException e RuntimeException não é disposta de forma aleatória. A exceção NullPointerException herda de RuntimeException, e esta última herda de Exception. Seguindo essa lógica, a exceção NullPointerException é apresentada antes das demais para permitir que a mesma possa ser disparada quando necessário, senão sua superclasse engloba sua execução. Caso isso não acontecesse, seria um erro de compilação.
Com esse raciocínio, se acontecer o código “int array[] = {1, 2}; array[2] = 3;” na linha 64, dispara-se a exceção RuntimeException, o que permite exibir a saída bc. Isso é possível porque o código citado dispara a exceção ArrayIndexOutOfBoundsException que herda de RuntimeException, e ainda há a execução constante do código presente na área de finally. Essas informações inviabilizam as alternativas A, B e E.
Como subclasse especificada, quando se dispara a exceção NullPointerException dispensa-se a exceção RuntimeException na execução do programa. Assim, o código presente na linha 68 nunca será executado quando isso ocorrer com a linha 66. Portanto, as alternativas C e F estão incorretas e apenas a alternativa D é viável. Pode-se verificar isso se na linha 64 tivermos o código “int array[] = {1, 2}; Integer i = null; array[i.intValue()] = 3;”. Nessa codificação, o objeto i possui referência nula e não permite a execução da atribuição do valor 3 no objeto array. Alternativa correta: D.
Nenhum comentário:
Postar um comentário