Java/Construtor
É uma operação especial da classe, que executa no momento da instanciação do objeto. (através do comando new)
Usos comuns:
- Iniciar valores dos atributos
- Permitir ou obrigar que o objeto receba dados / dependências no momento de sua instanciação (injeção de dependência). Pode obrigar o usuário fornecer alguns dados no momento de criar um objeto.
Considere uma Classe produto que tenha como atributos o nome, o preço e a quantidade:
Um construtor padrão para Produto:
public Produto (){
}
Na instanciação, quando criamos um objeto do tipo Produto, internamente o compilador já utiliza o construtor padrão:
ex.: Produto produto = new Produto();
É possível especificar mais de um construtor na mesma classe (chamamos de sobrecarga).
Se um construtor customizado não for especificado, a classe disponibiliza o construtor padrão:
A classe Produto pode ser escrita da seguinte forma:
public class Product {
private String nome;
private double preco;
private int quantidade;
//construtores
public Produto () { // construtor padrão
}
public Produto (String nome, double preco) {
this.nome = name;
this.price = preco;
}
public Produto(String nome, double preco, int quantidade) {
this.nome = nome;
this.prco = preco;
this.quantidade = quantidade;
}
No exemplo temos três construtores projetados:
- Produto (); ---> construtor padrão, chamado da seguinte forma: Produto produto = new (Produto();
- Produto (nome, preço); ---> Instanciado: Produto produto = new Produto("TV", 800.00);
- Produto (nome,preco,quatidade); ---> Produto produto = new Produto("TV", 800.00,20);
Considerações preliminares: objetos e arrays quando são instanciados assumem um valor padrão. Assim, no construtor padrão, os valores assumidos pelos atributos nome, preco e quantidade são "null", 0.00 e 0, respectivamente. Da mesma forma, o campo quantidade no construtor Produto (nome,preco) assume o valor 0 (zero)
- String recebe o valor null;
- Campos numéricos recebem valore ZERO.
É importante diferenciar o parâmetro do atributo em um construtor:
- this.nome ------> atributo de Produto;
- nome -----------> parâmetro do construtor.
O compilador entende o parâmetro como uma variável local, daí se ambas tiverem o mesmo nome (sem a palavra this), a atribuição não terá efeito algum.