Static

6 respostas
M

Ola pessoal

Gostaria de saber para que serve a palavra reservada STATIC em java ?
Estive estudando java porém não consegui entender oque ela faz.
Oque entendi é que seria a ordem de declaração dos métodos , seria isso?? mas como ela funciona???
Estou cheio de dúvidas.

Desde já agradeço.!

6 Respostas

Roger75

Veja este artigo (está em Artigos/Tutoriais):

http://www.guj.com.br/java.tutorial.artigo.121.1.guj

kaique

Cara…a palavra static indica q a variavel ou metodo pertence a classe, e nao a uma simples instancia do objeto…por exemplo:

Se vc tem uma classe Teste com uma variavel ou metodo estatico, nao sera preciso instanciar o objeto dakela classe pra poder acessar os mebros estaticos, basta colocar na frente deles o nome da classe. Lembrando que uma o valor de uma variavel estatica sera acessivel a todos os objetos dakela classe, podendo qualker um deles alterar esse valor…

Qualker duvida posta dinovo…

Vlw!!

A
A palavra static serve para criar variaves ou metodos que são acessados sem a necessidade de uma instância da classe.

Por exemplo, suponha que vc tenha uma classe Conecta com uma variavel numeroConexoes.

Declarando a variavel numeroConexoes como static, não  necessidade de criar a instancia para acessa-la, por exemplo

Conecta c = new Contecta();

System.out.println(c.numeroConexoes);

Sendo estatica, so basta fazer isso:
System.out.println(Conecta.numeroConexoes);

Isso é util quando a variavel ou metodo nao sao caracteristicas proprias da instancia que vc cria (new Contecta()) e sim quando é comum a todos independente da instancia.

É claro que o acesso depende do modifcador de acesso (public, protected…)

dudaskank

Tem também o inicializador estático, que é um bloco fora de qualquer método que é executado quando a classe é inicializada. Mais informações aqui.

Um exemplo:

class X {
   int x, y, z;

   static {
      System.out.println("Blablabla");
   }

   X() {
   }
}

Tá o exemplo não é dos melhores eheheh...

flw

T

Amigo dá uma olhada no que eu fiz!
Eu estudo assim, pego livros, tutoriais, etc.. .junto tudo e monto um exemplo bem legal.

/* Quando e porquê usar static?
 * static é uma das palavras-chave do Java, e é também motivo de muita confusão
 * e dúvidas entre o pessoal que esta começando(eu). Aliás, mesmo os mais experientes

 * confundem-se às vezes em usar ela. O método static mais famoso de todos é o main.
 * É através dele que vimos nosso primeiro programa em Java nascer, e é sempre via
 * main que nossos programas criam vida. Por definição da linguagem Java, o método
 * main precisa necessariamente ter acesso public, ser static, não retornar coisa 
 * alguma ( void ) e receber como argumento um array de String (String args[]).
 *
 * Como regra geral, tenha isso em mente: dentro de métodos static somente é 
 * possível pode acessar outros métodos e variáveis que também sejam static. 
 * Dentro do método pode-se definir qualquer tipo de variável, static ou não.
 * Caso seja necessário acessar algum método ou membro não-static, é necessário
 * criar uma instância da classe e então chamar o que quiser. Já o contrario é
 * um pouco diferente: dentro de membros não-static, é possível acessar tanto
 * propriedades static quanto as não-static.
 *
 * O fato de ser preciso primeiramente criar uma instância da classe para só 
 * então chamar algum método não-static ou acessar uma variável comum dentro de
 * um método static deve-se ao fato que dentro dele não existe uma referência
 * para o ponteiro this. O ponteiro this é utilizado para referenciar 
 * propriedades da classe em que estamos trabalhando.
 *
 * Ao contrário do que o nome soa, static não significa que a variável ou método
 * sera estática do ponto de vista que seu valor não pode mudar ( final é usado
 * para estes casos ). static nos garante que somente haverá uma, e não mais que
 * uma, referência para determinada variável ou método disponível em mémoria.
 * Em outras palavras, declarando alguma coisa como static, todas as instâncias
 * da classe irão compartilhar a mesma cópia da variável ou método. 
 * 
 * Declarar algo como static também permite você acessar as coisas diretamente,
 * ou seja, sem precisar criar uma instância da classe. Existe inclusive um 
 * Design Patter baseado no uso de static: Singleton. 
 */
 

class StaticTemporaria {
    public static int contador_static = 0;
    public int contador_normal = 0;

    public StaticTemporaria() {}

    public static void incrementaStatic(){
        contador_static++;
        System.out.println("Contador STATIC agora é = " + contador_static);
    }
    public void incrementaContador() {
        contador_normal++;
        System.out.println("Contador NORMAL agora é = "+ contador_normal);
    }
}

 

public class Static{
    public static void main(String args[])
    {
        System.out.println("\n1ª Instância -----");
        StaticTemporaria s1 = new StaticTemporaria();
        s1.incrementaStatic();
        s1.incrementaContador();

        System.out.println("\n2ª Instância -----");
        StaticTemporaria s2 = new StaticTemporaria();
        s2.incrementaStatic();
        s2.incrementaContador();
        
        System.out.println("\n3ª Instância -----");
        StaticTemporaria s3 = new StaticTemporaria();
        s3.incrementaStatic();
        s3.incrementaContador();

        System.out.println("\n4ª Instância -----");
        StaticTemporaria s4 = new StaticTemporaria();
        s4.incrementaStatic();
        s4.incrementaContador();
    }
}
A saída gerada por este programa será:
 
    1ª Instância -----
    Contador STATIC agora é = 1
    Contador NORMAL agora é = 1
    
    2ª Instância -----
    Contador STATIC agora é = 2
    Contador NORMAL agora é = 1
    
    3ª Instância -----
    Contador STATIC agora é = 3
    Contador NORMAL agora é = 1
    
    4ª Instância -----
    Contador STATIC agora é = 4
    Contador NORMAL agora é = 1
Note que o atributo "contador_static", que é static, não teve seu valor zerado a cada novo objeto criado da classe StaticTemporaria, mas sim incrementado, enquando "contador_normal", que é um atributo comum, ficou sempre em 1, pois zeramos o valor no construtor da classe.
LPJava

o terra.jr disse tudo!!

Criado 10 de julho de 2006
Ultima resposta 11 de jul. de 2006
Respostas 6
Participantes 7