Tratamento de Exceções

4 respostas
Narj-j2ee

Pessoal seguinte eu estava olhando algums exercicios e me deparei com a seguinte questão.

try{


}finally{

}

Por que do uso do Try sem catch ?

4 Respostas

javer

Esse camarada aqui explica um pouco sobre isso.

sergiotaborda
Narj-j2ee:
Pessoal seguinte eu estava olhando algums exercicios e me deparei com a seguinte questão.
try{


}finally{

}

Por que do uso do Try sem catch ?

O finally tem um comportamento especial. Ele é chamado aconteça o que acontecer dentro do bloco try.
Isto é util quando vc precisa fazer alguma coisa antes que o método termine, normalmente fechar recursos, mas ha outros usos

repare

try{

  System.out.println("oi");

   return "java";
}finally{
   
 System.out.println("adeus");
}

O que é impresso ?
É impresso "oi" e "adeus". Repare que mesmo quando eu ordeno o return no fim do bloco try o finally ainda corre.
Este é a utilidade do finally ele corre depois do return mas antes que o método termine.

Dê um breakpoint e execute passo a passo para ver como é o comportamento.

renamed
Vamos supor que eu só possa ter uma conexão ativa com uma base de dados, então tenho o seguinte método:
public void abreConexao() throws Exception{
		if (conexao == null){
			throw new Exception("Conexão já aberta!");
		}
		
		// CODIGO QUALQUER AQUI
		
		conexao = DriverManager.getConnection("bla bla");
		
	}

Vamos supor que eu queira fechar uma conexão com uma base de dados e colocar como null sua referência...

try{
conexao.close();
conexao = null;
}catch(Exception e){
}

Nesse caso não estou preocupado com a excessão porque a única coisa que realmente quero que ocorra é o fechamento da conexão.
Entretanto, se houver um erro, a conexão não será setada como null... entao faço assim:

try{
conexao.close();
}catch(Exception e){
}finally{
conexao = null;
}

Como o catch não está sendo usado aqui, eu simplesmente coloco o finally, que será executado sempre, independente se a conexao for fechada ou não...

try{
conexao.close();
}finally{
conexao = null;
}

ok?

marcosvidolin

Olá

Você pode fazer um bloco try{}finally{}, por exemplo, para alguns casos em que não existe uma maneira de se tratar um determinada exceção (como: exceções da VM ou de memória), evitando assim ter que lançar a exceção para ser “tratada” mais tarde (exceções devem ser tratadas caso sejam do tipo checadas).
O finally como os amigos ja falaram, pode ser usado para fechar conexões com banco ou fechar arquivos - de modo que o finally sempre será executado, mesmo que uma exceção não seja lançada.

Espero ter ajudado.

Criado 19 de novembro de 2009
Ultima resposta 19 de nov. de 2009
Respostas 4
Participantes 5