Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

static - Usando membros estáticos em Java

Agora que você sabe a importância das constantes em aplicações Java e como manusear as constantes de seus programas com enum, vamos mostrar uma aplicação mais direta das constantes em nosso estudo de Orientação a Objetos.

Esse artigo Java mostra o uso das variáveis do tipo static, artifício muito usado para manter o controle sobre todos os objetos de uma mesma classe, por exemplo.


O que é static em Java

Só pelo nome, já dá pra desconfiar que é algo relacionado com constante, algo 'parado' (estático).

Quando definimos uma classe e criamos vários objetos dela, já sabemos que cada objeto irá ser uma cópia fiel da classe, porém com suas próprias variáveis e métodos em lugares distintos da memória.

Ou seja, o objeto 'fusca' tem suas variáveis próprias, diferentes do objeto 'ferrari', embora ambos tenham o mesmo 'modelo', que é a classe 'Carro'.

Quando definimos variáveis com a palavra static em uma classe ela terá um comportamento especial: ela será a mesma para todos os objetos daquela classe.

Ou seja, não haverá um tipo dela em cada objeto. Todos os objetos, ao acessarem e modificarem essa variável, acessarão a mesma variável, o mesmo espaço da memória, e a mudança poderá ser vista em todos os objetos.


Como declarar uma variável static em Java

Basta colocar a palavra static antes do tipo:
static tipo nomeDaVariavel

Em uma classe:
private static int vendidos;
public static int totalAlunos;


Quando usar variáveis static em Java

Principalmente quando você quiser ter um controle sobre os objetos ou quando todos os objetos devem partilhar uma informação (evitar ter que fazer Composição ou chamar métodos de outros objetos).


  • Exemplo 1: Para controle de número total de objetos
Imagine que você é dono de uma loja de venda de veículos.
Cada um que vende, é um comprador diferente, dados diferentes etc. Portanto, cada carro será um objeto.
Você cria a variável estática 'total', e no construtor a incrementa (total++). Pronto, saberá quantos carros foram vendidos, automaticamente.

Um exemplo parecido, seria para um aplicativo de uma escola ou empresa, para controle de quantos funcionários existem na empresa, ou em cada setor dela.



  • Exemplo 2: Para compartilhar uma informação
Muitas aplicações Java, principalmente jogos, usam o static para compartilhar informações sobre o número de objetos. O uso tem a ver algoritmos de sobre inteligência computacional.

Por exemplo, em um jogo de futebol, quando você joga contra o computador.
A máquina tem uma estratégia diferente dependendo do time que você escolher, do modo que você jogar, depende do número de jogadores dele e seu também.

E como saber o número atual de jogadores do time deles?
Ora, um método static. Pois todos os jogadores são objetos de uma mesma classe.

Em um jogo de luta, se existirem 3 inimigos contra 2 personagens seus. Provavelmente o computador vai te atacar.
Mas se você matar dois deles, eles estarão em desvantagem. Existe então um método que faz com que os inimigos corram, caso o número de jogadores dele seja menor que o seu.
Para obter essa informação, os objetos devem partilhar da informação: número de personagens vivos.


Exemplo de código com static

O seguinte código cria uma classe bem simples, a "Carro" que simplesmente informa quando o objeto é criado - através do método construtor padrão main - e incrementa a variável 'total', que vai guardar a informação do número total de objetos/carros criados em sua aplicação.


staticTest.java
public class staticTest {
    public static void main(String[] args) {
        Carro fusca = new Carro();
        Carro ferrari = new Carro();
        Carro jipe = new Carro();
    }

}


Carro.java
public class Carro {
    public static int total=0;
    
    Carro(){
        total++;
        System.out.println("Objeto criado. Existem "+total+" objetos dessa classe");
    }
}

11 comentários:

Anônimo disse...

Nó cara, valeuuu, estava a diar tentando incrementar. muito obrigado!!!

Unknown disse...

Ficou bem claro. Meus parabéns.

Silvio Neres disse...

Carro(){
total++;
System.out.println("objeto criado. existem\n" + total + "\nda mesma classe");
}
}
fiz dessa forma ficou com melhor visualização.

Unknown disse...

Ótima explicação!

Unknown disse...

Olá, primeiramente parabéns pelo projeto, sinceramente até agora é o melhor curso de java que já vi entre vários que já estudei e esse curso é top dentre muitos outros.
Agora vamos lá: fiz esse algoritmo aqui e funcionou certinho, porém não entendi nesse exemplo o porquê que na class Carro ao criar a variável static int total já atribui logo um valor que foi 0 (zero), sendo que até antes desse exemplo para atribui um valor numa class devemos criar um construtor para as variaveis internamente.

Unknown disse...

Não entendia como podia ser util. Obrigado

Anônimo disse...

Muito obrigado ajudou bastante!!!
Desta forma podemos ter controle em uma variável static sendo acessada por todos os objetos.

Unknown disse...

Você atribuir um valor inicial direito na variável ou através do construtor é opcional, pois o efeito é o mesmo

Unknown disse...

Atribuir um valor de inicialização diretamente na variável ou através do construtor é opcional,pois o efeito é o mesmo.

Anônimo disse...

Esse métodos static são herdados e acessados da mesma forma com os objetos filhos?

Tainha disse...

Valeu...ótima explicação, avançando mais ainda em Java.

Contribuir com o Java Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo


Tutoriais de Java