Como funcionam os campos estáticos em Java

Pode haver momentos em que é útil ter valores compartilhados em todas as instâncias de uma classe específica. Campos estáticos e constantes estáticas habilitar esse tipo de compartilhamento pertencendo ao classe e não para os objetos reais.

O Modificador Estático

Normalmente, os campos e métodos definidos em uma classe podem ser usados ​​apenas quando um objeto desse tipo de classe foi criado. Por exemplo, considere uma classe de item simples que controla as mercadorias em uma loja:

 classe pública Item {

 private String itemName;


 Item público (String itemName)

 {

 this.itemName = itemName;

 }


 public String getItemName ()

 {

 retornar itemName;

 }

 } 

Para poder usar o método getItemName (), primeiro precisamos criar um objeto Item, neste caso, catFood:

 classe pública StaticExample {


 public static void main (String [] args) {

 Item catFood = novo Item ("Whiskas");

 System.out.println (catFood.getItemName ());

 }

 } 

No entanto, se o modificador estático for incluído em uma declaração de campo ou método, nenhuma instância da classe será necessário para usar o campo ou método - eles estão associados à classe e não a um indivíduo objeto. Se você olhar para o exemplo acima, verá que o modificador estático já está sendo usado no diretório

instagram viewer
declaração do método principal:

 público estático void main (String [] args) { 

o método principal é um método estático que não requer que um objeto exista antes de poder ser chamado. Como main () é o ponto de partida para qualquer aplicativo Java, na verdade não existem objetos para chamá-lo. Você poderia, se quisesse ter um programa que se chama continuamente, faça o seguinte:

 classe pública StaticExample {


 public static void main (String [] args) {


 String [] s = {"aleatório", "string"};

 StaticExample.main (s);

 }

 }


Não é muito útil, mas observe como o método main () pode ser chamado sem uma instância de uma classe StaticExample.

O que é um campo estático?

Os campos estáticos também são conhecidos como campos de classe. Eles são simplesmente campos que têm o modificador estático em suas declarações. Por exemplo, vamos voltar à classe Item e adicionar um campo estático:

 classe pública Item {


 // campo estático uniqueId

 estática privada int uniqueId = 1;


 private int itemId;

 private String itemName;


 Item público (String itemName)

 {

 this.itemName = itemName;

 itemId = uniqueId;

 uniqueId ++;

 }

 }


Os campos itemId e itemName são campos não estáticos normais. Quando uma instância de uma classe Item é criada, esses campos terão valores mantidos dentro desse objeto. Se outro objeto Item for criado, ele também terá os campos itemId e itemName para armazenar valores.

O campo estático uniqueId, no entanto, mantém um valor que será o mesmo em todos os objetos Item. Se houver 100 objetos Item, haverá 100 instâncias dos campos itemId e itemName, mas apenas um campo estático uniqueId.

No exemplo acima, uniqueId é usado para atribuir a cada objeto Item um número único. Isso é fácil, se todo objeto Item criado pegar o valor atual no campo estático uniqueId e incrementá-lo em um. O uso de um campo estático significa que cada objeto não precisa saber sobre os outros objetos para obter uma ID único. Isso pode ser útil se você quiser saber a ordem em que os objetos Item foram criados.

O que é uma constante estática?

As constantes estáticas são exatamente iguais aos campos estáticos, exceto que seus valores não podem ser alterados. Na declaração de campo, o final e estático modificadores são usados. Por exemplo, talvez a classe Item deva impor uma restrição ao comprimento do itemName. Poderíamos criar uma constante estática maxItemNameLength:

 classe pública Item {


 static int int id = 1;

 public static final int maxItemNameLength = 20;


 private int itemId;

 private String itemName;


 Item público (String itemName) 

 {

 if (itemName.length ()> maxItemNameLength)

 {

 this.itemName = itemName.substring (0,20);

 }

 outro

 {

 this.itemName = itemName;

 }

 itemId = id;

 id ++;

 } } 

Assim como nos campos estáticos, as constantes estáticas são associadas à classe e não a um objeto individual:

 classe pública StaticExample {


 public static void main (String [] args) {


 Item catFood = novo Item ("Whiskas");

 System.out.println (catFood.getItemName ());

 System.out.println (Item.maxItemNameLength);

 }

 }


Há duas coisas importantes a serem observadas sobre a constante estática maxItemNameLength:

  • É declarado como um campo público. Geralmente, é uma má idéia tornar público um campo em qualquer classe que você criar, mas, neste caso, não importa. O valor da constante não pode ser alterado.
  • A constante estática é usada no nome da classe Item, não em um objeto Item.

Constantes estáticas podem ser vistas em toda a API Java. Por exemplo, o classe de invólucro inteiro possui dois que armazenam os valores máximo e mínimo que um int tipo de dados podem ter:

 System.out.println ("O valor máximo para int é:" + Inteiro. VALOR MÁXIMO);

 System.out.println ("O valor mínimo para int é:" + Inteiro. MIN_VALUE);


 Resultado:

 O valor máximo para int é: 2147483647

 O valor mínimo para int é: -2147483648