Relembre do capítulo 8, que para construir um objeto usamos o operador new
seguido do nome da classe que queremos instanciar, seguido de zero ou mais expressões, entre parêntesis, para dar valores aos parâmetros de um dado construtor dessa classe.
A criação de uma instância de uma classe provoca as seguintes ações, executadas em três passos:
reserva e afetação de memória para o objeto (contando com o espaço a ocupar por cada um dos seus atributos);
inicialização desses atributos com valores por omissão:
- zero para atributos de tipos primitivos numéricos,
false
paraboolean
, enull
para atributos cujo tipo não é primitivo;invocação do construtor indicado, sobre o objeto acabado de criar.
O objetivo principal dos construtores é o de inicializar os atributos de um objeto acabado de criar com valores diferentes dos valores por omissão.
Incluímos a definição do construtor que pretendemos, na classe que estamos a construir:
xpublic class Jogador {
private String nome;
private int pontuacao;
private int maximoJogada;
/**
* Inicializa os atributos de uma nova instancia
* @param nomeJog O nome do novo jogador
* @requires nomeJog != null
*/
public Jogador (String nomeJog) {
this.nome = nomeJog;
this.pontuacao = 0;
this.maximoJogada = 0;
}
// Ainda nao estah completa
}
this
No corpo de um método, a palavra reservada this
representa o objeto corrente – o objeto alvo da invocação do método.
Neste caso, em que this
aparece num construtor, ele representa o objeto acabado de criar, aquele sobre o qual o construtor foi invocado.
A palavra this
seguida de um ponto e do nome de um atributo, representa o atributo em questão do objeto corrente.
Tal como descrito atrás, a execução da instrução
xxxxxxxxxx
Jogador meuJogador = new Jogador("Maria");
do método main
da classe ClienteDeJogador
, tem como efeito
Jogador
, null
,nome
, pontuacao
e maximoJogada
,meuJogador
, de uma referência para esse objeto.Repare nas duas últimas instruções do construtor: atribuem o valor zero aos atributos pontuacao
e maximoJogada
. Na verdade, estas instruções não são necessárias, pois no instante em que são executadas já esses atributos têm o valor zero (o valor que é dado por omissão aos atributos do tipo int
). Escolhemos inclui-las para melhor perceção do estado inicial do objeto.
Representamos agora o estado da memória como resultado daquela instrução.
Após os passos 1 e 2:
Após o passo 3:
Após o passo 4:
Anterior: 10.2. Atributos de instância
Seguinte: 10.4. Métodos que revelam o estado