Quando implementamos nossas classes
em uma linguagem de programação Orientada a Objetos, o compilador, por padrão, cria
um método sem parâmetros chamado “construtor”. A finalidade desse método é
executar atividades iniciais que preparem o objeto para uso como: invocar o
construtor da classe base, atribuir valores padrões para as variáveis membros;
etc.
O (pseudo-)
método construtor determina que ações devem ser executadas quando da criação de
um objeto. Em Java, o construtor é definido como um método cujo nome deve ser o
mesmo nome da classe e sem indicação do tipo de retorno -- nem mesmo void. O
construtor é unicamente invocado no momento da criação do objeto através do
operador new.
O retorno do
operador new é uma referência para o objeto recém-criado. O construtor pode
receber argumentos, como qualquer método. Usando o mecanismo de sobrecarga,
mais de um construtor pode ser definido para uma classe. (RICARTE)
Uma das principais características da
Orientação a Objetos, o Polimorfismo, permite que o método construtor, como
qualquer método, seja sobrescrito e tenha várias versões com assinaturas
diferentes (parâmetros com tipos e quantidades diversas). Vejamos mais detalhes
no texto abaixo:
Toda classe
tem pelo menos um construtor sempre definido. Se nenhum construtor for
explicitamente definido pelo programador da classe, um construtor padrão, que
não recebe argumentos, é incluído para a classe pelo compilador Java. No
entanto, se o programador da classe criar pelo menos um método construtor, o
construtor padrão não será criado automaticamente -- se o programador desejar
mantê-lo, deverá criar um construtor sem argumentos explicitamente.
No momento
em que um construtor é invocado, a seguinte sequência de ações é executada para
a criação de um objeto:
- O espaço para o objeto é alocado e seu conteúdo é inicializado (bitwise) com zeros.
- O construtor da classe base é invocado. Se a classe não tem uma superclasse definida explicitamente, a classe Object é a classe base.
- Os membros da classe são inicializados para o objeto, seguindo a ordem em que foram declarados na classe.
- O restante do corpo do construtor é executado.
Seguir essa sequência
é uma necessidade de forma a garantir que, quando o corpo de um construtor
esteja sendo executado, o objeto já terá à disposição as funcionalidades
mínimas necessárias, quais sejam aquelas definidas por seus ancestrais. O
primeiro passo garante que nenhum campo do objeto terá um valor arbitrário, que
possa tornar erros de não inicialização difíceis de detectar.
Bibliografia
RICARTE, I. L. M. Construtores.
In: <http://www.dca.fee.unicamp.br/cursos/PooJava/metodos/construtor.html>. Acesso em
17/03/2013.