terça-feira, 27 de julho de 2010

[Java] Descrever programas para manipular suas próprias exceções


Na linguagem de programação Java, o programador pode definir suas próprias exceções. Exceções definidas pelo programador são criadas estendendo-se a classe Exception. As classes de exceções contêm os mesmos membros que a classe “normal” contém. Abaixo segue um exemplo de uma classe de exceção definida pelo programador que contém um construtor, algumas variáveis e métodos.
public class ServerTimedOutException extends Exception {
private int porta;

// Usa o método getMessage da classe Exception para retornar o motivo da exceção
public ServerTimedOutException(String m, int p) {
super(m);
this.porta = p;
}

public int getPorta() {
return porta;
}
}

Assim, para lançar essa exceção recém criada, use a seguinte forma:
throw new ServerTimedOutException("Não foi possível conectar ao servidor", 80);
Para demonstrar como utilizar esta nova exceção, veja o exemplo a seguir. Considere um programa cliente-servidor. Nele, se houver uma tentativa de conexão e o servidor não responder por mais de 5 segundos será lançada a exceção criada acima. Assim o exemplo ficaria da seguinte forma:
public void Conecta(Servidor nomeDoServidor) thows ServerTimedOutException {
private boolean conectou;
private int portaConectar = 80;

// abrir é um método fictício para tentar abrir uma conexão e retorna true com sucesso e false caso contrário.
Conectou = abrir(nomeDoServidor, portaConectar);

if(!conectou){
throw new ServerTimedOutException("Não foi possível conectar ao servidor", portaConectar);
}
}

E para capturar a exceção lançada pelo método Conecta:
public void ProcuraServidor() {
try{
Conecta(primeiroServidor);
}
catch(ServerTimedOutException e1){
System.out.printl(“Não foi possível conectar ao primeiro servidor. Tentando conectar ao outro servidor”);
//É possivel fazer try-catch aninhados. Veja abaixo
try{
Conecta(outroServidor);
}
catch(ServerTimedOutException eOutro){
System.out.printl(“Erro: ” + eOutro.getMessage + “ conectando na porta ” + eOutro.getPorta());
}
}
}

Nenhum comentário:

Postar um comentário