Dúvida em try-catch!

Ola pessoal, venho mais uma vez recorrer aqui aqueles que já passaram por estes erros simples =D

O problema é: Onde devo colocar o return dentro de um bloco try-catch? Por exemplo:

public class Exemplo {
  String teste = "teste";
  
  public String testando() {
   try {

     //return aqui dá erro de que o metodo não está retornando nada.

  } catch(Exception e) {
    
  } finally {
    //return aqui o Eclipse dá este aviso: "finally block does not complete normally"
  }

 }


}

E aí galera, onde vai o return??

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Reifel[/color][/size] :joia:

veja bem vc coloca tudo que precisa dentro do try, caso de algum erro o catch captura o erro e o que está no try não será executado…o finally será executado independete se o catch capturar ou não a exceção…Coloque o return dentro do try…dependendo de como vc quer que o metodo seja executado…

Foi mal pela falta do BBCode hehehe…
Poisé cara, só que quando eu coloco um return dentro do Try{}, o Eclipse acusa erro de que o método não retorna nada =|

Vc precisa colocar um return no try e outro no final do seu bloco try/catch, ou pelo menos neste último.

Vc pode colocar um return dentro do try e no catch lancar uma exceção, assim:

try {
  metodoQLancaExcecao();
  return true;
} catch (Exception e) {
  throw new MinhaException();
} finally {
  // caso precise
}

Caro Fábio, isso acontece, porque todo método não “void” declarado tem que retornar alguma coisa, pelo seu método você tem que colocar um return no “try”, e porque o Eclipse acusa erro?, pelo seguinte, como o método sempre tem que retornar algo no teu caso uma String, nada garante que esse return dentro do try vai ser executado, pois pode-se encontrar uma exceção no meio do caminho antes de chegar no return, por boa prática, vc pode colocar um return no catch tb, para uma página de erro se for uma aplicação web.

é a mesma coisa em if—else, tem que colocar return nos dois ou depois dos dois em um método, pois se não atender uma condição em um ele vai executar em um outro, o Java é inteligente… prevê esses erros em tempo de execução

vitorkgb, concordo com vc, por isso falei que tinha que ter no mínimo um return no final do bloco try/catch.

Ahhh valeu galera, agora entendi!

Coloquei o return depois do ultimo catch e funcionou! valeu!

Só te dando uma dica (não sei exatamente o que você quer fazer): o finally será executado de qualquer jeito, independente de ter esse return.

Ok! Só mais uma coisa, o finally será executado mesmo que o método não capture nenhuma exceção?

Sim. Finally sempre é executado.

a não ser q seja chamado um System.exit() no try ou catch.

Sim, o catch é executado quando é lançada uma exceção e o finally é executado ao terminar o bloco try, tenha ele sido bem sucedido ou não… você pode colocar o return no finally

try{
  //codigo
}catch(Exception e){
  //é executado somente se o codigo do try lançar Exception
}finally{
  //é executado sempre
  return "texto";
}

Sim, vai ser executado…

o não é obrigado a usar o finally, pode tirar ele… o obrigatório é só o par try e o catch

boa tarde pessoal, blezinha?
por favor me esclarecam quanto a função do return
por exemplo:
tenho um metodo que retorna uma variavel
estaria ele disponibilizando a variavel para que outros metodos a utilizem??? :lol: :lol:

sei que é uma duvida boba, mas não deixa de ser uma duvida
desde já agradeço qualquer esclarecimento :grin:
valeuuuuuuuu

[quote=“C3pO”]boa tarde pessoal, blezinha?
por favor me esclarecam quanto a função do return
por exemplo:
tenho um metodo que retorna uma variavel
estaria ele disponibilizando a variavel para que outros metodos a utilizem??? :lol: :lol:

sei que é uma duvida boba, mas não deixa de ser uma duvida
desde já agradeço qualquer esclarecimento :grin:
valeuuuuuuuu[/quote]

A keyword return, é utilizada para terminar a execução de um método (retorna ao método seguinte na pilha de chamada)… pode opicionalmente retornar um valor.

:wink:

Sim, com ou sem exceções o finally eh executado

[quote=“FabioStampede”]Ola pessoal, venho mais uma vez recorrer aqui aqueles que já passaram por estes erros simples =D

O problema é: Onde devo colocar o return dentro de um bloco try-catch? [/quote]

Exemplo inútil, mas funcional:

[code]public class Exemplo
{

static String teste = “teste”;

public static void main ( String args[] )
{
teste = testando();
System.out.println(teste);
}

public static String testando()
{
try
{
teste = “seilah”;
}
catch(Exception e)
{
teste = “deuerro”;
}
finally
{
System.out.println(teste);
}
return teste;

}

} [/code]

A saída vai ser:
seilah
seilah

Normalmente o tipo de variável usado é boolean, mas como vc usou String eu montei o exemplo com String. :roll: