Ir para conteúdo

Quando e como usar static?


Lüigi!

Posts Recomendados

Olá pessoal, tudo bem? Devido a umas dúvidas levantadas na shoutbox, resolvi criar esse tópico para ajudar os iniciantes em relação ao static, primeiramente, o que é um método static?

 

 

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.

 

 

 Resumindo um pouco, podemos falar que quando declaramos algo com static, todas as instâncias da classe irão compartilhar a mesma cópia da variável ou método. Ou seja, se fizermos uma classe chamado carro:

public class Carro {

  private static int contagem;
  private Modelo m;
  private Cor c;
  
  
  public Carro(Modelo m, Cor c){
   this.m = m;
   this.c = c;
   Carro.contagem++; //Atenção a essa parte do código
  }

  //Getters and setters do modelo e da cor

  public static int getContagem(){
    return Carro.contagem; //Um método static, não pode utilizar valores não estaticos
  }

}

  Vamos supor que criemos 2 objetos do tipo carro:

Carro a = new Carro(...);
//Contagem = 1
Carro b = new Carro(...);
//Contagem = 2

  Como um método estatico será uma cópia a todas as classes, a contagem ira crescer toda vez que um método for criado, e se pegarmos a contagem de ambas as instancias, o valor sempre será 2 (até que a contagem seja incrementada novamente)...

 (posso estar enganado, mas acho que nem podemos pegar o valor da instancia)

Carro a = ...;
Carro b = ...; 
Carro c = ...;

 Carro.getContagem(); //Irá retornar 3 até que o valor seja incrementado novamente!

Exemplos de como usar o static:

 

  • 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.

 

 Então galera, essa foi uma explicação básica sobre static, por favor, quem manjar ajuda ai a deixar esse tópico melhor ainda!

 

 Se gostou de um like! E comentários são sempre bem vindos!

 

PS:

  BIBLIOGRAFIA(Recomendo muito acessarem)

    http://www.javaprogressivo.net/2012/10/static-Usando-membros-estaticos-em-Java.html

    http://leandrokersting.blogspot.com.br/2008/01/quando-e-porqu-usar-static.html

Link para o comentário
Compartilhar em outros sites

Parabéns! Meu coração dói quando vejo gente usando static por tudo.

  Obrigado! Sim, dói pracas

 

Gostei Desse Tutorial Ajudou Muito !

  Obrigado!

 

Achei os exemplos meio zuados...

  Os exemplos eu dei um control C + V direto hu3hu3

Link para o comentário
Compartilhar em outros sites

Também Existem os Static Code-Blocks, Que São Executados Quando a Classe é Carregada,

 

Por Exemplo, Eu Tenho uma ArrayList e Quero Preenche-la Sem Depender de Um Método

public static final ArrayList<String> Nomes = new ArrayList<String>();

static{
	Nomes.add("Fulano");
	Nomes.add("Beltrano");
	Nomes.add("Sicrano");
}
Mas não Funciona com Métodos Relacionados ao NMS/Bukkit/Spigot
Link para o comentário
Compartilhar em outros sites

Também Existem os Static Code-Blocks, Que São Executados Quando a Classe é Carregada,

 

Por Exemplo, Eu Tenho uma ArrayList e Quero Preenche-la Sem Depender de Um Método

public static final ArrayList<String> Nomes = new ArrayList<String>();

static{
	Nomes.add("Fulano");
	Nomes.add("Beltrano");
	Nomes.add("Sicrano");
}
Mas não Funciona com Métodos Relacionados ao NMS/Bukkit/Spigot

 

 Sim =D 

Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, a class='ipsType_brandedLink' href='https://gamersboard.com.br/login/' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='Sign In Now'>acesse agora para postar com sua conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...