Construtor[resolvido]

9 respostas
cido18

Ola a todos
Tenho uma pequena duvida sobre varios construtores uma mesma classe, na verdade é para o que serve.

Tem um pequeno trecho de codigo que vi em um livro:

public class Home{

private int cont;
private double num

Home(double umNum){

this.num=umNum;

}
Home(int umCont){

cont=umCont++1;

}

}

Bom se não digite o codigo errado é mais ou menos assim, se alguem puder tirar essa duvida agradeço

9 Respostas

prog.tiago

Boa noite amigo, :D

Bem, construtores são usados para a construção de objetos. Vários construtores significam que vc pode construir (instanciar) objetos de uma classe de diversas formas.

No exemplo q vc viu
public class Home{

private int cont;
private double num

Home(double umNum){
this.num=umNum;
}

Home(int umCont){
cont=umCont++1;
}
}

Você pode construir um Home passando um double como parâmetro ou um int, pois vc tem dois construtores para essa classe (um que recebe um double e outro que recebe um int). A JVM escolherá qual construtor utilizar de acordo com o parâmetro que vc passar.

Espero ter ajudado.

Boa noite! :wink:

cido18

Digamos que ao inves de utilizar estes construtores separados eu acabase juntando ele assim:

public class Home{

private int cont;
private double num

Home(double umNum,int umCont){

this.num=umNum;

cont=umCont++1;

}

}

não seria a mesma coisa??? se for qual o sentido de utilzar dois construtores na mesma classe.

AndreMendes

Talvez sua aplicação não precise de dois construtores, mas pense nesse caso:

public class Cliente{
    
    String nome;    
    String telefone;    
    String nomeDaEsposa;
    
    public Cliente(String nomeC, String telefoneC){
    
        this.nome = nomeC;
        this.telefone = telefoneC;
        this.nomeDaEsposa = null;
    }

    public Cliente(String nomeC, String telefoneC, String nomeDaEsposaC){
    
        this.nome = nomeC;
        this.telefone = telefoneC;
        this.nomeDaEsposa = nomeDaEsposaC;
    }
    //resto do codigo
}

Pensei no exemplo agora, pode até ter ficado meio besta, mas a idéia é de que nem todo cliente tem uma esposa, então porque devemos obrigar que a aplicação crie um cliente com uma esposa? Entendeu ? Expliquei certo ?

FacaNaCaveira

Fala ai Cido18, blz?? Complementando a resposta do colega acima, os varios construtores tambem servem para vc criar objetos sem ter a necessidade de utilizar os metodos set

public class Pessoa {
    private Integer idpessoa;
    private String nome;
    private String email;

    public Pessoa() {//Contrutor sem parametros
    }

//Construtor que pode ser utilizado em um SELECT ou Delete com idpessoa na Clausula WHERE
    public Pessoa(Integer idpessoa) {
        this.idpessoa = idpessoa;
    }
    
//Construtor que pode ser utilizado em um INSERT
    public Pessoa(String nome, String email) {
        this.nome = nome;
        this.email = email;
    }
    
//Construtor que pode ser utilizado em um UPDATE
    public Pessoa(Integer idpessoa, String nome, String email) {
        this.idpessoa = idpessoa;
        this.nome = nome;
        this.email = email;
    }

Exemplo: quando vc vai fazer um INSERT, que precisa preenche o objeto e depois passa-lo para os dado serem incluidos. Vc iria usar esse construtor, pois na inclusão normalmente o ID costuma ser AUTO INCREMENT e no SQL aonde aparece a referencia ao valor do id vc passa NULL que ele cria um numero automaticamente para aquele campo.

public Pessoa(String nome, String email) {
        this.nome = nome;
        this.email = email;
    }

Exemplo: quando vc vai fazer um UPDATE, que precisa preenche o objeto e depois passa-lo para os dado serem incluidos. Vc iria usar esse construtor, pois no UPDATE normalmente o ID costuma ser utilizado na clausula WHERE.

public Pessoa(Integer idpessoa, String nome, String email) {
        this.idpessoa = idpessoa;
        this.nome = nome;
        this.email = email;
    }

Exemplo: quando vc vai fazer um SELECT(de uma informação especifica) ou DELETE , vc necessita apenas do id que ira entrar na clausula WHERE tanto do SELECT quanto do DELETE

public Pessoa(Integer idpessoa) {
        this.idpessoa = idpessoa;
    }

Abração 8)
Max

cido18

Agora sim vi sentido em utilizar varios contrutores.
Obrigado a todos

FredGeek

cido18
tente não usar “this” aonde não precisa.

this é usado quando o parâmetro de um método tem o mesmo nome do atributo da classe.

aqui tem necessidade do this:

int atributoQualquer;
    public void setAtributoQualquer(int atributoQualquer){
        this.atributoQualquer = atributoQualquer;
    }

mas aqui não:

Home(double umNum){ this.num=umNum; }

AndreMendes

O this não é usado também para que o código fique mais claro ? Para que você saiba que a variável em questão é uma variável da classe que vcê está trabalhando, e não um parametro ? Se isso for real, é interessante usar o this sempre que trabalhamos com uma variavel da classe… Certo ?

FredGeek

não,

this é usado para referenciar a própria classe.

vc sabe se é um atributo ou parâmetro se eles tem identificadores diferentes.

se o atributo chama-se AAA, e o parametro BBB
vc n precisa do THIS pra te falar q o AAA é um atributo e BBB é o parâmetro

agora se eles tem identificadores iguais, o compilador vai sempre usar o do método se vc n usar o “this”.
com o “this” vc ta dizendo pra ele q vc esta se referindo ao atributo da classe e não ao parâmetro do método.

eu penso da seguinte maneira: Em programação só use oq vc precisar.

AndreMendes

FredGeek:
não,

this é usado para referenciar a própria classe.

Certo, mas o que eu estou tentando descobrir é se o this também é usado para deixar o código mais legivel. No caso de você bater o olho no codigo, ao ver this.meuAtributo, você ja percebe de cara que isso é um atributo.

Criado 18 de agosto de 2010
Ultima resposta 18 de ago. de 2010
Respostas 9
Participantes 5