Considere a seguinte Classe Excecao implementada em Java. p...
public class Excecao {
public static void main(String[] args) { int num[] = new int[2]; try{ num[0] = 3; num[1] = 4; num[2] = 6; System.out.println( "sucesso" ); } catch (ArraylndexOutOfBoundsException e) { System.out.println( "erro" ); }finally{ System.out.println( "final" ); } } }
Quais strings serão impressas no console?
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa Correta: C - erro, final
Vamos entender o porquê dessa resposta. A questão aborda o tratamento de exceções em Java, um conceito fundamental em programação orientada a objetos e muito importante para evitar erros de execução inesperados. Quando lidamos com arrays em Java, acessos a índices inválidos podem gerar exceções, como a ArrayIndexOutOfBoundsException.
No código apresentado:
- É criado um array
num
de tamanho 2, logo, ele possui os índices 0 e 1. - Dentro do bloco
try
, as linhasnum[0] = 3;
enum[1] = 4;
estão corretas, pois acessam índices válidos. - No entanto,
num[2] = 6;
tenta acessar um índice fora do limite do array, o que gera uma ArrayIndexOutOfBoundsException.
Agora, analisemos o comportamento do código com essa exceção:
A exceção é capturada pelo bloco catch
, que é especificamente configurado para lidar com ArrayIndexOutOfBoundsException
. Quando a exceção é lançada, o controle é passado para dentro deste bloco, onde "erro" será impresso.
Independentemente do que acontece dentro do bloco try
ou catch
, o bloco finally
sempre será executado, garantindo que "final" seja impresso.
Portanto, as strings que aparecem no console são: "erro" e "final", confirmando que a alternativa correta é a C.
Por que as outras alternativas estão incorretas?
- A - "sucesso, erro, final": Não é possível que "sucesso" seja impresso, pois a exceção é lançada antes dessa linha ser executada.
- B - "sucesso, final": A execução não chega à impressão de "sucesso" por causa da exceção.
- D - "final": Embora "final" seja sempre impresso, "erro" também é impresso devido ao bloco
catch
. - E - "sucesso": "Sucesso" não é impresso porque a execução é interrompida pela exceção antes de chegar nessa linha.
Conclusão: Compreender o tratamento de exceções é essencial para lidar com erros em tempo de execução, garantindo que seu programa seja mais robusto e confiável.
Gostou do comentário? Deixe sua avaliação aqui embaixo!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Nessa questão podemos eliminar direto a alternativa E, Pois independente de sucesso ou erro o bloco finally sempre será executado.
int num[] = new int[2]; Declara um vetor de 2 posições [0,1]
num[0] = 3;
num[1] = 4;
num[2] = 6; -> Ao tentar adicionar o 6 ocorre um estouro pois o vetor é de 2 posições e não 3, logo em seguida segue para o tratamento(Catch e finally).
print ->Erro
Print ->Final
C) erro, final
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo