Bloco finally depois de um return é executado?

5 respostas
D

Pessoal,

estava montando uma classe, e fiquei na seguinte duvida:

{
//inicia a query
stmt.executeUpdate();

       return true;

}
	catch (Exception e) {
		conn.rollback();
		return false;
	}
	finally{
		stmt.close();
	}

O bloco finally é executado?

Eu estou achando que sim, pois vendo os cursores abertos, sempre estao, baixos, ou seja, com valor 1, mas é bom confirmar né…

Query:
select o.sid, osuser, machine,
count(*) num_curs
from v$open_cursor o, v$session s
where o.sid=s.sid
group by o.sid, osuser, machine
order by o.sid;

Valeu!

5 Respostas

marcosvidolin

Olá

você mesmo pode encontrar a resposta…
coloque uma mensagem no bloco finally e veja se ela é exibida logo após o retorno… =]

Espero ter ajudado.
[]'s

marcosvidolin

Dica coloque o codigo entre as tags CODE

Rafael_Marques1

o bloco finally será executado.

aliás, se não me engano ele é executado antes mesmo de retornar alguma coisa :wink: (o q faz todo sentido né)

C

Boa tarde

Isso mesmo o bloco finally sempre será executado, e ele é executado antes do return, por exemplo execute esse código abaixo que verá que o nuemro 2 será impresso antes do 1:

public class Teste {

	public static void main(String[] args) 
	throws Exception 
	{
		Teste t = new Teste();
		
		System.out.println(t.mensagem());
	}
	
	public String mensagem()
	throws Exception
	{
		try{
			return "1";
			
		}catch(Exception e){
			throw new Exception("erro");
			
		}finally{
			System.out.println("2");
		}
	}
}

falou.

D

Obrigado a todos.

Tinha feito alguns testes, mas queria outras opinioes para garantir…

vai que em produção, comece a estourar cursores, :slight_smile:

Vlw!

Criado 1 de abril de 2010
Ultima resposta 1 de abr. de 2010
Respostas 5
Participantes 4