SCJP Mock Q5

9 respostas
marciolx

a) erro de compilação
b) imprime 5 4 3 2 1 Feliz 2004!
c) imprime 4 1
d) imprime 4 Feliz 2004!
e) imprime 5 4 Feliz 2004!
f) imprime 5 4 1 Feliz 2004!
g) imprime 5 4 1
h) imprime 4 1 Feliz Natal!

public class GUJ5 {
	public static void main (String [] args) {
		int i = 0;
		int j = 0;
		try {
			i = 5/j;
			System.out.print ("5 ");
		} catch (ArithmeticException e) {
			System.out.print ("4 ");
			return;
		} catch (RuntimeException e) {
			System.out.print ("3 ");
		} catch (Exception e) {
			System.out.print ("2 ");
		} finally {
			System.out.print ("1 ");
		}
		System.out.print ("Feliz 2004! ");
	}
}

9 Respostas

cariocathi

letra c

por causa do return

marciolx

“cariocathi”:
letra c

por causa do return

isso mesmo! :smiley:

MarcusGoncalves

o finally é executado independente de qualquer coisa??

Ironlynx

Yep!É executado independentemente de uma exceção ser disparada ou não por um bloco try ou qquer bloco catch correspondente!

marciolx

Yep!É executado independentemente de uma exceção ser disparada ou não por um bloco try ou qquer bloco catch correspondente!

O finally só não é executado em casos extremos, como se alguém puxar a tomada do micro onde está rodando a JVM ou numa chamada à System.exit

D

como assim…agora não entendi…
ele nao sempre executado quando estamos dentro de um statement com try catch??

marciolx

“Duque”:
como assim…agora não entendi…
ele nao sempre executado quando estamos dentro de um statement com try catch??

A cláusula finally será sempre executada… mas…, se dentro do catch ou try houver uma chamada à System.exit(), então o programa termina. Como diz a documentação API de System.exit():
“Terminates the currently running Java Virtual Machine” Hasta la vista, baby :robot:

Outra maneira de exterminar a JVM antes do finally ser executado seria dar um chute (tchagi) preciso na CPU enquanto a JVM estiver executando o try ou catch :shock: :slight_smile:

Ou imagine que o mundo acabe enquanto a JVM estiver executando o bloco try ou catch :shock: :slight_smile:

Resta dizer que o bloco finally será sempre executado, mas nem sempre tudo o que estiver nele, se o próprio bloco finally lançar uma exception, ela será imediatamente propagada para o chamador.

É isso :?:

MarcusGoncalves

Então devo tratar exceções dentro do bloco finally com try … catch (se necessário)?
Ainda, posso ter try … catch … finally dentro do primeiro bloco finally?

Viajei?

marciolx

Então devo tratar exceções dentro do bloco finally com try … catch (se necessário)?
Ainda, posso ter try … catch … finally dentro do primeiro bloco finally?

Viajei?

sim, mas acho que a melhor prática seria não usar código que lança excessões no finally, ou, se isso acontecer, relançar a exception com throw…
eu acho :slight_smile:

Criado 3 de dezembro de 2003
Ultima resposta 4 de dez. de 2003
Respostas 9
Participantes 5