Construção, Iniciação e Destruição de Objectos/Construção de Objectos em Java
From Wiki**3
< Construção, Iniciação e Destruição de Objectos
A construção de objectos em Java segue a modalidade genérica da iniciação de objectos, i.e., primeiro iniciam-se os sub-objectos correspondentes a definições da superclasse e só depois os próprios. Este processo é recursivo, o que significa que a superclasse mais antiga na hierarquia é a que inicia primeiro, sendo seguida pela classe logo abaixo, etc., até chegar à classe cuja instância está a ser criada.
Como já se referiu, a linguagem Java procura esconder do programador pormenores como as especificadades de reserva de memória. No entanto, o programador ainda fica com algumas responsabilidades, nomeadamente na definição e chamadas dos construtores. Esta secção apresenta então os seguintes aspectos relacionados com a construção e iniciação de objectos em Java:
- Definição de construtores e ordem de invocação;
- Ordem de iniciação de atributos de classes (static) e de objectos.
Definição de Construtores
Usos Especiais de this e super
As palavras chave this e super, além das utilizações como auto-referência, permitem a chamada explÃcita a construtores.
this
A palavra reservada this pode ser utilizada de duas formas fundamentalmente diferentes:
- Uso como auto-referência
- Sintaxe especial para chamada, num construtor, a outros construtores da mesma classe
Auto-referência
Referência para o objecto "actual", i.e., para o objecto no contexto do qual se executa o código onde aparece a referência. O exemplo seguinte, embora não siga as regras de nomenclatura, ilustra o uso de this
como forma de desambiguar as variáveis no construtor.
class A { int x; A(int x) { this.x = x; } }
O seguinte exemplo mostra outro uso como auto-referência: o objecto passa-se a si próprio como argumento de uma operação:
class A { void f(A a) { /* operação sobre um "a" do tipo "A" */ } void g() { f(this); // operação sobre objecto do tipo "A" (o próprio) } }
Sintaxe Especial de Construção
Num construtor, esta palavra reservada pode ser utilizada para chamar explicitamente outro construtor da mesma classe. Quando é utilizado desta forma, this
pode ocorrer apenas uma vez e deve aparecer como a primeira instrução do construtor.
class A { A(int i) { /* qualquer coisa */ } A(float f, int i) { this(i); // chamada ao primeiro construtor /* resto do segundo construtor */ } }