Problema com Try Catch

Bom o que acontece é o seguinte:
Estava lendo a apostila da Caelum e lá diz que é ruim utilizar if retornando um valor booleano caso o parametro passado esteja errado.
Pois bem estou tentando executar com o Try Catch agora mas, como farei pra ele solicitar ao usuário toda vez que ele digitar o parametro de forma errada.

[code]import java.io.*;
public class Teste{

public String nome="";

public String Excecao(String nome){
	try {
	
	if(nome.equals("Henry")){
		throw new IllegalArgumentException();
		}
	else{
		this.nome = nome;
		return(this.nome);
		}
	
	}
	catch(IllegalArgumentException e){
		System.out.println("Digitou Henry e nao pode");
	}
}

}[/code]

Classe principal

[code]import java.util.*;

public class ExemploExcecao{

public static void main(String args[]){

Teste t = new Teste();

System.out.println("Digite seu nome");
Scanner src = new Scanner (System.in);
String oia = src.nextLine();
String retorno = t.Excecao(oia);

System.out.println(retorno);

}
}[/code]

Seguinte ele esta dando este erro aqui tb, porque?

C:>javac ExemploExcecao.java
.\Teste.java:20: missing return statement
}
^
1 error

Bom desde já agradeço quem me ajudar

você deve colocar um return dentro ou após o catch.
O método precisa ter um valor de retorno, mesmo em casos de exceção.
:wink:

simples, lendo a mensagem: Se seu metodo lançar uma exceção ele deve return alguma coisa senao ele tb deve return alguma coisa… o compilador ele nao pensa… antes dele chegar a linha q lança uma exceção… ele verifica se vc implementou correto o metodo e nao implementou nao… pq ele ver olha tem uma exceção aki e ela é trata ali… mais eu vou retornar o q? nao to achando o return qdo lanço uma exceção… ja que o método define q ele tem q retornar uma String.

entendeu? sempre que vc coloca um tipo que nao seja void… vc deve return algo para o seu método senao o codigo nao compila… Tratamento de exceções nao tem nada ver com esse problema… e sim o assunto de fundamentos :d

flw!! qualquer duvida so gritar… olha o codigo basico que nao compila e que compila:

//nao compila


...
String zad(){
if(num==1){
return "1";
}
else{
return"0";
}
}

é garantido que um ou outro execute mais nesse aqui nao:

String zz(){
if(num==0){
return"0";}

//cadê o return caso seja falso?
}

percebeu o problema que o compilador diz?

Ele disse "Missing return statment at Teste.java:20.
Isso quer dizer que no método public String Excecao(String) voce não está retronando nada…
Ah, mas vc estava dentro do else, não é?! SIM, porem o compilador não pode garantir que aquele ponto será atingido em tempo de execução, e para resolver isso é só colocar no método um return no final.

[code]public String Excecao(String nome){
try {

	if(nome.equals("Henry")){
		throw new IllegalArgumentException();
		}
	else{
		this.nome = nome;
		}
	
	}
	catch(IllegalArgumentException e){
		System.out.println("Digitou Henry e nao pode");
	}
return this.nome;
}[/code]

[quote=bernardo.rafael]você deve colocar um return dentro ou após o catch.
[/quote]

Tem que ser depois do catch, afinal o catch captura um evento excepcional, e o compilador vai continuar querendo um return no final. Teste ai.