Explicar o código

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

[code]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);
}

}[/code]

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.

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

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)

Agora eu entendi. Vlw

[quote=david.jv]Galera, alguém poderia me explicar esse código ai.

[code]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);
}

}[/code][/quote]

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…

Vamos imaginar que você tenha uma Classe que só pode ser instanciada com parâmetros.
Exemplo: [code]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...

}[/code]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.

Só para confirmar:

Outra classe:

[code]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?

    }


[/code]

[quote=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 } ... [/quote]

[quote=david.jv]Só para confirmar:

Outra classe:

[code]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?

    }


[/code][/quote]

sim, é isso ai mesmo…

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 …

[code]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?
 }

}[/code]