Considere o esquema do construto try que faz parte do mecani...

Próximas questões
Com base no mesmo assunto
Q762251 Programação
Considere o esquema do construto try que faz parte do mecanismo de tratamento de exceções da linguagem de programação Java no quadro abaixo.  try { ... } catch (...) { ... } ... finally { ... }
Analise as afirmações abaixo, sobre o seu funcionamento.
1) Uma cláusula finally é colocada no fim de uma lista de tratadores, imediatamente depois de uma construção try completa. 2) Se a cláusula try lança nenhuma exceção, a cláusula finally é executada antes de a execução continuar depois da construção try. 3) Se a cláusula try gera uma exceção e é capturada por um tratador, a cláusula finally não é executada. 4) Se a cláusula try gera uma exceção, mas não é pega por um tratador após o construto try, a cláusula finally é executada antes de a exceção ser propagada. 5) A construção try sem tratadores de exceção pode ser seguida por uma cláusula finally. Isso faz sentido, claro, somente se nos comandos que a compõem existe um throw, break, continue, ou return. Estão corretas, apenas: 
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa Correta: D - 1, 2, 4 e 5.

A questão aborda o mecanismo de tratamento de exceções em Java, um tópico fundamental para qualquer programador que utilize essa linguagem. As exceções são situações anormais que podem ocorrer durante a execução de um programa e que requerem um fluxo de execução especial para serem tratadas. O construto try-catch-finally é a estrutura que o Java fornece para lidar com essas situações.

O bloco try contém o código que pode gerar uma exceção, o bloco catch define como tratar as exceções que o bloco try pode lançar, e o bloco finally é um bloco que será executado independentemente de uma exceção ser lançada ou não, sendo útil para liberar recursos ou executar limpezas necessárias.

Com base na explicação da estrutura, vamos justificar as afirmações corretas:

  • 1) Uma cláusula finally é colocada no fim de uma lista de tratadores, imediatamente depois de uma construção try completa. Correto, o bloco finally sempre vem após os blocos catch, se estes existirem, ou imediatamente após o bloco try caso não haja blocos catch.
  • 2) Se a cláusula try lança nenhuma exceção, a cláusula finally é executada antes de a execução continuar depois da construção try. Correto, pois o bloco finally é sempre executado após a conclusão do bloco try, independentemente de uma exceção ser lançada ou não.
  • 3) Se a cláusula try gera uma exceção e é capturada por um tratador, a cláusula finally não é executada. Incorreto, pois o bloco finally é executado após o tratamento da exceção pelo bloco catch, mesmo se a exceção for capturada e tratada.
  • 4) Se a cláusula try gera uma exceção, mas não é pega por um tratador após o construto try, a cláusula finally é executada antes de a exceção ser propagada. Correto, o bloco finally sempre será executado, mesmo quando uma exceção não é tratada pelos blocos catch.
  • 5) A construção try sem tratadores de exceção pode ser seguida por uma cláusula finally. Isso faz sentido, claro, somente se nos comandos que a compõem existe um throw, break, continue, ou return. Correto, pois mesmo sem um bloco catch, o bloco finally pode ser útil para executar código de finalização após uma das instruções mencionadas.

Assim, as afirmações corretas são aquelas que destacam o funcionamento e a finalidade do bloco finally no contexto de tratamento de exceções em Java, identificando seu uso independente da ocorrência de exceções e a garantia de sua execução em diversos cenários.

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

Somente comentando a alternativa errada. A clásula finally sempre é executada mesmo se a cláusula try gerar uma exceção!

Eliminando a assertiva III já entrontra o gabarito :)

1, 2, 4 e 5.

In most programming languages, the "finally" block is executed after the execution of the try block, regardless of whether an exception occurred or not. However, the "finally" block is executed before the exception is propagated further up the call stack.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo