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 */
   }
 }

super

Ordem de Iniciação de Atributos