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.