Line 7: | Line 7: | ||
O atributo é partilhado por todas as instâncias da classe. | O atributo é partilhado por todas as instâncias da classe. | ||
+ | <java5> | ||
class StaticInt { | class StaticInt { | ||
− | + | static int i = 1; | |
} | } | ||
+ | </java5> | ||
Utilização hipotética: | Utilização hipotética: | ||
+ | <java5> | ||
StaticInt.i++; | StaticInt.i++; | ||
+ | </java5> | ||
− | Utilização | + | Utilização possível, mas não recomendada: |
+ | <java5> | ||
StaticInt si = new StaticInt(); | StaticInt si = new StaticInt(); | ||
− | + | si.i++; // "i" é independente de "si" | |
+ | </java5> | ||
− | O mesmo fragmento, com o mesmo significado, mas melhor estilo (a | + | O mesmo fragmento, com o mesmo significado, mas melhor estilo (a referência a <code>i</code> faz-se através da classe e não de um objecto particular): |
+ | <java5> | ||
StaticInt si = new StaticInt(); | StaticInt si = new StaticInt(); | ||
StaticInt.i++; | 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. | Ou seja, o facto de existirem objectos de uma classe não significa que sejam a forma preferencial para invocar métodos. | ||
Line 29: | Line 37: | ||
=== Classe com método <code>static</code> === | === Classe com método <code>static</code> === | ||
− | O método pode ser invocado sem que seja necessária a | + | 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: | Definição das classes: | ||
− | class StaticInt { | + | <java5> |
+ | class StaticInt { static int i = 1; } // exemplo anterior | ||
class StaticMeth { | class StaticMeth { | ||
− | + | static void incr() { return StaticInt.i++; } | |
} | } | ||
+ | </java5> | ||
Invocação do método: | Invocação do método: | ||
− | StaticMeth.incr(); // o valor de | + | <java5> |
+ | StaticMeth.incr(); // o valor de "StaticInt.i" é agora "2" | ||
+ | </java5> | ||
− | Utilização | + | Utilização possível, mas não recomendada (ver explicação acima): |
+ | <java5> | ||
StaticMeth sm = new StaticMeth(); | StaticMeth sm = new StaticMeth(); | ||
− | sm.incr(); // | + | sm.incr(); // "incr" é independente do contexto de "sm" |
+ | </java5> | ||
== ''Hello World'' == | == ''Hello World'' == | ||
Line 51: | Line 65: | ||
O tradicional programa, em versão Java: | O tradicional programa, em versão Java: | ||
+ | <java5> | ||
public class Hello { | public class Hello { | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
Line 56: | Line 71: | ||
} | } | ||
} | } | ||
+ | </java5> | ||
== Historial == | == Historial == | ||
* PO 2005/2006: Aula 02. | * PO 2005/2006: Aula 02. |
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>
O tradicional programa, em versão Java:
<java5>
public class Hello { public static void main(String[] args) { System.out.println("Hello world!"); } }
</java5>