Introdução aos Objectos/Classes com membros "static"

From Wiki**3

< Introdução aos Objectos
Revision as of 18:35, 23 October 2013 by Root (talk | contribs) (Created page with "{{TOCright}} == Classe com atributo <code>static</code> == O atributo é partilhado por todas as instâncias da classe. <java5> class StaticInt { static int i = 1; } </jav...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Classe com atributo static

O atributo é partilhado por todas as instâncias da classe.

<java5>

class StaticInt {
  static int i = 1;
}

</java5>

Utilização hipotética:

<java5>

StaticInt.i++;

</java5>

Utilização possível, mas não recomendada:

<java5>

StaticInt si = new StaticInt();
si.i++;        // "i" é independente de "si"

</java5>

O mesmo fragmento, com o mesmo significado, mas melhor estilo (a referência a i faz-se através da classe e não de um objecto particular):

<java5>

StaticInt si = new StaticInt();
StaticInt.i++;

</java5>

Ou seja, o facto de existirem objectos de uma classe não significa que sejam a forma preferencial para invocar métodos.

Classe com método static

O método pode ser invocado sem que seja necessária a existência de instâncias da classe. Isto quer dizer que o método se comporta, na realidade, como uma função (não necessita do contexto de nenhum objecto em particular).

Definição das classes:

<java5>

class StaticInt { static int i = 1; }  // exemplo anterior
class StaticMeth {
  static void incr() { return StaticInt.i++; }
}

</java5>

Invocação do método:

<java5>

StaticMeth.incr();    // o valor de "StaticInt.i" é agora "2"

</java5>

Utilização possível, mas não recomendada (ver explicação acima):

<java5>

StaticMeth sm = new StaticMeth();
sm.incr();        // "incr" é independente do contexto de "sm"

</java5>