[DÚVIDA] Retorno dentro de TRY

Olá, estou com problemas num método que retorna um valor. A variável que quero retornar é criada dentro de um try, mas dá erro (sim, pode ser que a variável não seja criada e assim não haverá retorno) mas existe algum modo de eu retornar ela dentro do try sem esse erro? (Erro de método “não void” sem retorno).

Exemplo:

public int teste(){
try{
int variavel = 0;

variavel++;

return variavel;
}
catch(Exception e){

JOptionPane...
}
}

O jeito que eu faço, eu acho que está errado

public int teste(){
int variavel = 0;
try{
variavel++;
}
catch(Exception e){

JOptionPane...
}
return variavel;
}

Olá!
Se deu exceção, poste-a, fica melhor para visualizarmos o problema :slight_smile:

Sobre o que quer, basta fazer:

try {
 //seu código
 return algumValor;
} catch (Exception e) {} return null;

Não esqueça, caso ocorra uma exceção, mesmo assim deve retorna algum valor, ok?:slight_smile:

Edit: ao invés de retornar o valor podes lançar a exceção, isso “desobriga” que você tenha de colocar o return algumvalor;
já que não podes dar um return após lançar uma exceção.

Não acredito que o jeito que você está fazendo esteja errado. É até muito utilizado em alguns casos.

Mas você poderia fazer de outra forma. Poderia retornar 0 caso caia na exceção ou até lança-la para que seja tratada em outro método.

[code]
public int teste(){
try{
int variavel = 0;
variavel++;
return variavel;
}
catch(Exception e){

	JOptionPane.showMessageDialog(null, "");
	return 0;
}

}[/code]

Oi,

Para! Para! Para! Para! rsrs

a sua maneira já esta correta. Porque não criar a variável fora do Try ??

Tchauzin!

[quote=lina]Oi,

Para! Para! Para! Para! rsrs

a sua maneira já esta correta. Porque não criar a variável fora do Try ??

Tchauzin![/quote]

Rs. Acho que eu posso ter complicado a vida dele ao invés de ajudar.
Sim, está correto e Lina, ele já cria a variavél fora do Try, apenas incrementa ela dentro do Try :slight_smile:

Ah quero evitar isso, porque isso foi meio que um exemplo, na minha aplicação eu crio um objeto. E nao quero criar o objeto se um resultset não encontrar nada.

public Contato metodo(){

String query = "select * from contato where nome = 'x'";
//aqui, independente do resultset, o objeto é criado, nao queria isso
Contato contato = new Contato();
try{

PreparedStatement statement = connection.prepareStatement(sql);
			
ResultSet resultset = statement.executeQuery();
			
if(resultset.next()){			
	
contato.setNome(resultset.getString("nome"));
contato.setEmail(resultset.getString("email"));
contato.setEndereco(resultset.getString("endereco"));
contato.setData(resultset.getString("dataNascimento"));

return contato;				
}			
statement.close();
resultset.close();	
}
catch(Exception e){}

mas nao gostei de como ficou, fiz desse jeito agora

public Contato metodo(){

String query = "select * from contato where nome = 'x'";

Contato contato;
try{

PreparedStatement statement = connection.prepareStatement(sql);
			
ResultSet resultset = statement.executeQuery();
			
if(resultset.next()){			
	
contato = new Contato();
				
contato.setNome(resultset.getString("nome"));
contato.setEmail(resultset.getString("email"));
contato.setEndereco(resultset.getString("endereco"));
contato.setData(resultset.getString("dataNascimento"));

return contato;				
}			
statement.close();
resultset.close();	
}
catch(Exception e){}

return null;
}

mas só esse return null; depois do catch que não me agradou

Contato é uma classe só com get e set

Oi,

Faz assim:

[code]public Contato metodo(){

String query = “select * from contato where nome = ‘x’”;

Contato contato = null;
try{

PreparedStatement statement = connection.prepareStatement(sql);

ResultSet resultset = statement.executeQuery();

if(resultset.next()){

contato = new Contato();

contato.setNome(resultset.getString(“nome”));
contato.setEmail(resultset.getString(“email”));
contato.setEndereco(resultset.getString(“endereco”));
contato.setData(resultset.getString(“dataNascimento”));

}
statement.close();
resultset.close();
}
catch(Exception e){}

return contato;

}[/code]

Não precisa 2 retornos. Você já declara antes do Try sua classe.

Tchauzin!

[quote=lina]Oi,

Faz assim:

[code]public Contato metodo(){

String query = “select * from contato where nome = ‘x’”;

Contato contato = null;
try{

PreparedStatement statement = connection.prepareStatement(sql);

ResultSet resultset = statement.executeQuery();

if(resultset.next()){

contato = new Contato();

contato.setNome(resultset.getString(“nome”));
contato.setEmail(resultset.getString(“email”));
contato.setEndereco(resultset.getString(“endereco”));
contato.setData(resultset.getString(“dataNascimento”));

}
statement.close();
resultset.close();
}
catch(Exception e){}

return contato;

}[/code]

Não precisa 2 retornos. Você já declara antes do Try sua classe.

Tchauzin!
[/quote]

Realmente, brisa minha … 1 retorno, caso não entre no if, ele retorna o null.

Tnks ^^