Qual a forma certa do try / Catch

Pessoas Boa tarde!!!

Bom eu estou com uma dúvida. Estou dando uma olhada na faculdade em try / catch e estou percebendo que o pessoal não está usando de uma forma correta. Estão tipo colocando pra retornar boolean pra ver se está ok, utilizando o if e estiver certo e o else caso esteja errado, apresentando uma mensagem.

Bom eu gostaria de saber como usar try Catch nesta situação aqui. eu instanciei uma classe Login e estou chamando o setNome. Caso ele esteja errado quero que ele gere uma exception, imprima o erro como no catch e volte pedindo o usuário.

Alguem ai pode me ajudar?

Vou colocar o que eu já fiz aqui.
Classe Login:

[code]public class Login{

private String nome="";
private String senha="";

public void setNome(String nome){
	if(!nome.equals("")){
		this.nome = nome;
	}
}
public void setSenha(String senha){
	if(!senha.equals("")){
		this.senha = senha;
	}
}
public String getNome(){
	return(this.nome);
}
public String getSenha(){
	return (this.senha);
}

}[/code]

Classe Usuario

[code]import java.util.Scanner;
public class Usuario{

	public static void main(String args[]){
		String nome;
		try{
			
		Scanner src = new Scanner(System.in);
		System.out.println("Digite seu usuário");
		Login logins = new Login();
		logins.setNome(nome = src.nextLine());
		System.out.println(logins.getNome());
		
				}
		catch(NullPointerException e){
			
			System.out.println("você nao digitou nada");
			
			// Aqui dando este erro eu quero voltar para o Digite o seu usuário novamente
			
				}
		}
	}[/code]

Agradeço de já a ajuda!!!

olá… aqui está o seu código modificado!

[code]public class Login{

private String nome = "";
private String senha = "";

public void setNome(String nome) throws ValorInvalidoException{
	if(!nome.equals("")  && !(nome == null)){
		this.nome = nome;
	} else {
		throw new ValorInvalidoException();
	}
}

public void setSenha(String senha) throws ValorInvalidoException{
	if(!senha.equals("")  && !(senha == null)){
		this.senha = senha;
	} else {
		throw new ValorInvalidoException();
	}
}

public String getNome(){
	return this.nome;
}

public String getSenha(){
	return this.senha;
}

}[/code]

[code]
public class ValorInvalidoException extends Exception {

public ValorInvalidoException() {
	super("Você não digitou nada!");
}

}[/code]

[code]import java.util.Scanner;

public class Usuario {

public static void main(String args[]) {
	try {

		Scanner src = new Scanner(System.in);
		System.out.println("Digite seu usuário");
		Login logins = new Login();
		logins.setNome(src.nextLine());
		System.out.println(logins.getNome());

	} catch (ValorInvalidoException e) {
		
		System.out.println(e.getMessage());
		main(args);
		
	}
}

}[/code]

com isso eu consigo imprimir da forma que eu quero?

e se caso fosse um unico parametro errado e nao a main inteira… como eu faria pra um unico parametro.

olá, acho que assim resolve seu problema:

[code]import java.util.Scanner;

public class Usuario {

public static void main(String args[]) {
	Scanner src = new Scanner(System.in);

	lerUsuario(src);
}

private static void lerUsuario(Scanner src) {
	try {
		System.out.println("Digite seu usuário");
		Login logins = new Login();
		logins.setNome(src.nextLine());
		System.out.println(logins.getNome());
	} catch (ValorInvalidoException e) {
		System.out.println(e.getMessage());
		lerUsuario(src);
	}
}

}[/code]