(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...") |
|||
Line 58: | Line 58: | ||
</java5> | </java5> | ||
− | |||
[[category:PO]] | [[category:PO]] | ||
[[category:PO Exemplos]] | [[category:PO Exemplos]] | ||
[[category:Java]] | [[category:Java]] | ||
+ | [[category:Ensino]] |
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.
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>