Difference between revisions of "Introdução aos Objectos/Classes com membros "static""

From Wiki**3

< Introdução aos Objectos
(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...")
 
(Classe com atributo static)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{TOCright}}
 
{{TOCright}}
== Classe com atributo <code>static</code> ==
+
== Classe com atributo '''static''' ==
  
 
O atributo é partilhado por todas as instâncias da classe.
 
O atributo é partilhado por todas as instâncias da classe.
  
<java5>
+
<source lang="java">
 
  class StaticInt {
 
  class StaticInt {
 
   static int i = 1;
 
   static int i = 1;
 
  }
 
  }
</java5>
+
</source>
  
 
Utilização hipotética:
 
Utilização hipotética:
  
<java5>
+
<source lang="java">
 
  StaticInt.i++;
 
  StaticInt.i++;
</java5>
+
</source>
  
 
Utilização possível, mas não recomendada:
 
Utilização possível, mas não recomendada:
  
<java5>
+
<source lang="java">
 
  StaticInt si = new StaticInt();
 
  StaticInt si = new StaticInt();
 
  si.i++;        // "i" é independente de "si"
 
  si.i++;        // "i" é independente de "si"
</java5>
+
</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):
  
<java5>
+
<source lang="java">
 
  StaticInt si = new StaticInt();
 
  StaticInt si = new StaticInt();
 
  StaticInt.i++;
 
  StaticInt.i++;
</java5>
+
</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 <code>static</code> ==
+
== 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:
  
<java5>
+
<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++; }
 
  }
 
  }
</java5>
+
</source>
  
 
Invocação do método:
 
Invocação do método:
  
<java5>
+
<source lang="java">
 
  StaticMeth.incr();    // o valor de "StaticInt.i" é agora "2"
 
  StaticMeth.incr();    // o valor de "StaticInt.i" é agora "2"
</java5>
+
</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):
  
<java5>
+
<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"
</java5>
+
</source>
  
[[category:Teaching]]
 
 
[[category:PO]]
 
[[category:PO]]
 
[[category:PO Exemplos]]
 
[[category:PO Exemplos]]
 
[[category:Java]]
 
[[category:Java]]
 +
[[category:Ensino]]

Latest revision as of 20: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"