...Entendendo static...
É um modificador que pode ser utilizado para métodos e váriaveis. Quando algum recurso é marcado com esse modificador pertence a uma classe e nao suas instâncias.Entao, podemos acessar métodos ou variáveis estáticas, sem mesmo criar uma cópia da classe. Usando o modificador static, garante que haverá sempre uma única referência, para métodos ou variáveis.Declarando algo como Static, todas as instancias da classe irá compartilhar a mesma cópia da variável ou método. E outra coisa, é que podemos acessar diretamente, sem a necessidade de instânciar uma classe, como nao acontece em não static.
Dentro de métodos estáticos, podemos acessar somente outros métodos e variáveis estáticos.
Um exemplo para minha compreensão:
class Exemplo
{
// Variavel static
public static int contador = 0;
// Variavel nao-static
public int outroContador = 0;
public Exemplo() {}
// Precisa ser static porque "contador" é static
public static void incrementaContador()
{
contador++;
System.out.println("contador agora é "+ contador);
}
public void incrementaOutroContador()
{
outroContador++;
System.out.println("outroContador agora é "+ outroContador);
}
}
public class StaticTeste
{
public static void main(String args[])
{
Exemplo ex1 = new Exemplo();
ex1.incrementaContador();
ex1.incrementaOutroContador();
Exemplo ex2 = new Exemplo();
ex2.incrementaContador();
ex2.incrementaOutroContador();
Exemplo ex3 = newExemplo();
ex3.incrementaContador();
ex3.incrementaOutroContador();
Exemplo ex4 = newExemplo();
ex4.incrementaContador();
ex4.incrementaOutroContador();
}
}
Saída:
contador agora é 1outroContador agora é 1contador agora é 2outroContador agora é 1contador agora é 3outroContador agora é 1contador agora é 4outroContador agora é 1
**reparem uma coisa, que a variável "contador" teve seu valor incrementado a cada novo objeto criado, enquanto a variável "outroContador", nao mudou o seu valor, ficou sempre em 1, pois seu valor foi zerado em seu construtor da classe.**
Um outro exemplo mostra que usando o modificador static, podemos acessar diretamente um método ou uma váriável , sem a necessidade instânciar a classe, ou seja, (acesso direto).
class Exemplo2
{
// Escreve alguma frase na tela
public static void escreve(String msg)
{
System.out.println(msg);
}
// Retorna a multiplicação de dois números int
public static int multiplica(int n1, int n2)
{
return (n1 * n2);
}
// Construtor, apenas para mostrar que
// ele nem chega ser chamado
public Exemplo2()
{
System.out.println("Construtor do Exemplo2");
}
}
public class StaticTeste2
{
public static void main(String args[])
{
//acessando diretamente
Exemplo2.escreve("Multiplicando 3 vezes 3:");
int resultado = Exemplo2.multiplica(3, 3);
Exemplo2.escreve("Resultado: "+ resultado);
}
}
Agora se não fosse static:
public class StaticTeste2
{
public static void main(String args[])
{
// necessário instanciar a classe para acessar
Exemplo2 ex2 = new Exemplo2();
ex2.escreve("Multiplicando 3 vezes 3:");
int resultado = ex2.multiplica(3, 3);
ex2.escreve("Resultado: "+ resultado);
}
}
...
Editar
0 comentários:
Postar um comentário