Ybadoo - Soluções em Software Livre
Turmas
1º Semestre de 2026

(IFC, 2026) Analise os códigos abaixo, disponibilizados nas linguagens Java e Python, que implementam a mesma lógica. Sobre o fluxo de execução com blocos de tratamento de exceções (try-catch/except-finally) e relançamento de exceções, assinale a alternativa que apresenta a saída produzida. Considere que o método/função principal captura a exceção relançada e que o bloco finally é sempre executado antes da propagação da exceção, conforme as especificações oficiais de ambas as linguagens.

class A extends Exception { }
class B extends A { }
public class Teste {
public static void metodo() throws A {
try {
throw new B();
} catch (B e) {
System.out.print("B ");
throw e;
} finally {
System.out.print("F ");
}
}
public static void main(String[] args) {
try {
metodo();
} catch (A e) {
System.out.print("A ");
}
}
}
class A(Exception):
pass
class B(A):
pass
def metodo():
try:
raise B()
except B as e:
print("B ", end="")
raise
finally:
print("F ", end="")

if __name__ == "__main__":
try:
metodo()
except A as e:
print("A ", end="")

A B F A.

B B A F.

C F B A.

D B F.

E F A.

Para determinar a saída do código, vamos analisar o fluxo de execução passo a passo, seguindo as regras de tratamento de exceções do Java/Python:

  1. O programa é executado e chama a função metodo().
  2. Dentro de metodo(), o bloco try executa throw new B()/raise B(), levantando uma exceção do tipo B.
  3. O bloco catch (B e)/except B as e captura essa exceção (pois o tipo corresponde exatamente).
  4. O comando print é executado, imprimindo "B".
  5. O comando throw/raise relança a mesma exceção B que estava sendo tratada.
  6. Antes que a exceção relançada se propague para fora da função, o bloco finally é sempre executado. Assim, print é executado, imprimindo "F".
  7. Agora, a exceção B se propaga para o escopo de chamada.
  8. No escopo externo, o bloco catch (A e)/except A as e verifica se pode capturar a exceção. Como a classe B herda de A, uma exceção do tipo B é uma instância de A (polimorfismo por subtipo). Portanto, a exceção é capturada com sucesso.
  9. O comando print é executado, imprimindo "A".
  10. A sequência de impressão na tela será, portanto: B F A.

Conforme exposto, a resposta correta é:

A B F A.