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());
        }
    }
} 



