Explicar o código

10 respostas
D

Galera, alguém poderia me explicar esse código ai.

public class ClasseDeExcecao extends Exception {


    public ClasseDeExcecao() {
        super("Causa: Desconhecida"); // O que esse super faz ou está fazendo nessa linha de código?
    }

    //
    public ClasseDeExcecao(String messagem) { // aqui tbm não entendi. isso é um outro construtor?
        super(messagem);
    }

}

10 Respostas

jaboot

Sim, aquilo ali embaixo é um outro construtor. Você pode ter N construtores para a mesma classe.

Quanto à primeira, se não me engano, se alguém tentar construir a classe sem passar parâmetros, ela chama a classe pai e manda uma mensagem de erro para o usuário.

D

como assim, construir uma classe sem passar parâmentros?

ctdaa

linha 05: super(“Causa: Desconhecida”);
Aqui está acionando o construtor da super classe, ou seja “Exception” -> ClasseDeExcecao extends Exception

linha 09: é um construtor com outra assinatura. Assim você pode criar sua ClasseDeExcecao sem parâmetros ou com parâmetros: (String mensagem)

D

Agora eu entendi. Vlw

alucardeck
david.jv:
Galera, alguém poderia me explicar esse código ai.
public class ClasseDeExcecao extends Exception {


    public ClasseDeExcecao() {
        super("Causa: Desconhecida"); // O que esse super faz ou está fazendo nessa linha de código?
    }

    //
    public ClasseDeExcecao(String messagem) { // aqui tbm não entendi. isso é um outro construtor?
        super(messagem);
    }

}

o super indica que vc vai usar o metodo da classe pai..
no caso, vc esta usando o construtor da classe Exception..
um dos construtores do Exception aceita uma String como parametro..

o segundo construtor... é um overload (sobrecarga) do construtor da sua classe..
indica que vc tem um segundo meio de instanciar a classe, no caso, passando um parametro para usar no construtor da classe pai...

jaboot
Vamos imaginar que você tenha uma Classe que só pode ser instanciada com parâmetros. Exemplo:
public class Pessoa {
    int idade;
    String nome;
    
    // construtor com dois parâmetros
    public Pessoa(int idade, String nome){
	this.idade = idade;
	this.nome = nome;
    }
    
    // construtor com 1 parâmetro
    public Pessoa(int idade){
	this.idade = idade;
    }
    
    // construtor com OUTRO parâmetro
    public Pessoa(String nome){
	this.nome = nome;
    }
      
     Getters e Setters...
}
Se alguém tentar criar uma Pessoa pessoa = new Pessoa() vai dar pau; só aceita construir a classe Pessoa com a passagem de pelo menos um parâmetro. Regra do Java: se você não criar nenhum construtor para a classe, automaticamente é criado um construtor sem parâmetros.
D

Só para confirmar:

Outra classe:
public Cliente getCliente() throws ClasseDeExcecao {
        Cliente cliente = null;
        int linhaSelecionada = tClientes.getSelectedRow();
        if (linhaSelecionada < 0) {
            throw new ClasseDeExcecao("Não foi selecionado nenhum sócio"); // nessa linha ele chama o segundo construtor e passa para o construtor da classe pai, correto?

        }
...
jaboot

david.jv:
Só para confirmar:

Outra classe:

public Cliente getCliente() throws ClasseDeExcecao { //Perceba que aqui ele diz que se der algum pau, é pra lançar a Exceção ClasseDeExcecao Cliente cliente = null; int linhaSelecionada = tClientes.getSelectedRow(); if (linhaSelecionada < 0) { throw new ClasseDeExcecao("Não foi selecionado nenhum sócio"); //E aqui ele lança realmente a ClasseDeExcessao, passando os parâmetros que ela requisita } ...

S
david.jv:
Só para confirmar: Outra classe:
public Cliente getCliente() throws ClasseDeExcecao {
        Cliente cliente = null;
        int linhaSelecionada = tClientes.getSelectedRow();
        if (linhaSelecionada < 0) {
            throw new ClasseDeExcecao("Não foi selecionado nenhum sócio"); // nessa linha ele chama o segundo construtor e passa para o construtor da classe pai, correto?

        }
...

sim, é isso ai mesmo...

D

Valeu galera, excelentes explicações.
O primeiro código tá entendido, agora eu queria que vocês me ajudassem a entender esse aqui:

A única coisa que eu sei sobre esse código é que ele limita caracteres em JText field ...

public class LimitaCaracter extends PlainDocument { // o que é esse PlainDocument?

    private int iMaxLength;

     public LimitaCaracter(int maxlen) {
         super(); // O super aqui tem a " mesma função" do super do outro código, ou melhor dizendo está acionando o construtor da super classe (PlainDocument)?
         iMaxLength = maxlen;
     }

     @Override
     public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException { // Aqui eu não entendi quase nada, tipo esse AttributeSet faz o que? e esse BadLocationException ?
         if (str == null) {
             return;
         }

         if (iMaxLength <= 0)
         {
             super.insertString(offset, str, attr); // Aqui eu não entendi nada
             return;
         }

         int ilen = (getLength() + str.length()); //aqui tbm não entendi nada. Tipo, de onde ele tirou esse getLength
         if (ilen <= iMaxLength) 
             super.insertString(offset, str, attr);   // aqui o super está fazendo o que?
     }

}
Criado 1 de abril de 2011
Ultima resposta 1 de abr. de 2011
Respostas 10
Participantes 5