Introdução aos Objectos/Classes com membros "static": Difference between revisions
From Wiki**3
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..." |
|||
| (3 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
{{TOCright}} | {{TOCright}} | ||
== Classe com atributo | == Classe com atributo '''static''' == | ||
O atributo é partilhado por todas as instâncias da classe. | O atributo é partilhado por todas as instâncias da classe. | ||
< | <source lang="java"> | ||
class StaticInt { | class StaticInt { | ||
static int i = 1; | static int i = 1; | ||
} | } | ||
</ | </source> | ||
Utilização hipotética: | Utilização hipotética: | ||
< | <source lang="java"> | ||
StaticInt.i++; | StaticInt.i++; | ||
</ | </source> | ||
Utilização possível, mas não recomendada: | Utilização possível, mas não recomendada: | ||
< | <source lang="java"> | ||
StaticInt si = new StaticInt(); | StaticInt si = new StaticInt(); | ||
si.i++; // "i" é independente de "si" | si.i++; // "i" é independente de "si" | ||
</ | </source> | ||
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): | 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): | ||
< | <source lang="java"> | ||
StaticInt si = new StaticInt(); | StaticInt si = new StaticInt(); | ||
StaticInt.i++; | StaticInt.i++; | ||
</ | </source> | ||
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. | ||
== Classe com método | == 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). | 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). | ||
| Line 38: | Line 38: | ||
Definição das classes: | Definição das classes: | ||
< | <source lang="java"> | ||
class StaticInt { static int i = 1; } // exemplo anterior | class StaticInt { static int i = 1; } // exemplo anterior | ||
class StaticMeth { | class StaticMeth { | ||
static void incr() { return StaticInt.i++; } | static void incr() { return StaticInt.i++; } | ||
} | } | ||
</ | </source> | ||
Invocação do método: | Invocação do método: | ||
< | <source lang="java"> | ||
StaticMeth.incr(); // o valor de "StaticInt.i" é agora "2" | StaticMeth.incr(); // o valor de "StaticInt.i" é agora "2" | ||
</ | </source> | ||
Utilização possível, mas não recomendada (ver explicação acima): | Utilização possível, mas não recomendada (ver explicação acima): | ||
< | <source lang="java"> | ||
StaticMeth sm = new StaticMeth(); | StaticMeth sm = new StaticMeth(); | ||
sm.incr(); // "incr" é independente do contexto de "sm" | sm.incr(); // "incr" é independente do contexto de "sm" | ||
</ | </source> | ||
[[category:PO]] | [[category:PO]] | ||
[[category:PO Exemplos]] | [[category:PO Exemplos]] | ||
[[category:Java]] | [[category:Java]] | ||
[[category:Ensino]] | |||
Latest revision as of 18:44, 8 November 2018
Classe com atributo static
O atributo é partilhado por todas as instâncias da classe.
class StaticInt {
static int i = 1;
}
Utilização hipotética:
StaticInt.i++;
Utilização possível, mas não recomendada:
StaticInt si = new StaticInt();
si.i++; // "i" é independente de "si"
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):
StaticInt si = new StaticInt();
StaticInt.i++;
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:
class StaticInt { static int i = 1; } // exemplo anterior
class StaticMeth {
static void incr() { return StaticInt.i++; }
}
Invocação do método:
StaticMeth.incr(); // o valor de "StaticInt.i" é agora "2"
Utilização possível, mas não recomendada (ver explicação acima):
StaticMeth sm = new StaticMeth();
sm.incr(); // "incr" é independente do contexto de "sm"