Cómo funcionan los campos estáticos en Java

Puede haber momentos en que sea útil tener valores compartidos en todas las instancias de una clase en particular. Campos estáticos y constantes estáticas habilite este tipo de intercambio al pertenecer a clase y no a los objetos reales.

El modificador estático

Normalmente, los campos y métodos definidos en una clase solo se pueden usar cuando se ha creado un objeto de ese tipo de clase. Por ejemplo, considere una clase de artículo simple que realiza un seguimiento de los productos en una tienda:

 Artículo de clase pública {

 cadena privada itemName;


 Artículo público (String itemName)

 {

 this.itemName = itemName;

 }


 public String getItemName ()

 {

 devolver itemName;

 }

 } 

Para poder utilizar el método getItemName (), primero debemos crear un objeto Item, en este caso, catFood:

 clase estática de ejemplo público {


 public static void main (String [] args) {

 Item catFood = nuevo Item ("Whiskas");

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

 }

 } 

Sin embargo, si el modificador estático se incluye en un campo o en una declaración de método, ninguna instancia de la clase es requerido para usar el campo o método - están asociados con la clase y no con un individuo objeto. Si vuelve a mirar el ejemplo anterior, verá que el modificador estático ya se está utilizando en

instagram viewer
declaración del método principal:

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

los método principal es un método estático eso no requiere que exista un objeto para poder llamarlo. Como main () es el punto de partida para cualquier aplicación Java, de hecho no hay objetos que existan para llamarlo. Podría, si deseara tener un programa que se llama a sí mismo continuamente, hacer esto:

 clase estática de ejemplo público {


 public static void main (String [] args) {


 Cadena [] s = {"aleatorio", "cadena"};

 StaticExample.main (s);

 }

 }


No es muy útil, pero observe cómo se puede llamar al método main () sin una instancia de una clase StaticExample.

¿Qué es un campo estático?

Los campos estáticos también se conocen como campos de clase. Son simplemente campos que tienen el modificador estático en sus declaraciones. Por ejemplo, volvamos a la clase Item y agreguemos un campo estático:

 Artículo de clase pública {


 // campo estático uniqueId

 private static int uniqueId = 1;


 private int itemId;

 cadena privada itemName;


 Artículo público (String itemName)

 {

 this.itemName = itemName;

 itemId = uniqueId;

 uniqueId ++;

 }

 }


Los campos itemId y itemName son campos no estáticos normales. Cuando se crea una instancia de una clase Item, estos campos tendrán valores que se mantienen dentro de ese objeto. Si se crea otro objeto Item, también tendrá los campos itemId y itemName para almacenar valores.

Sin embargo, el campo estático uniqueId contiene un valor que será el mismo en todos los objetos Item. Si hay 100 objetos Item, habrá 100 instancias de los campos itemId y itemName, pero solo un campo estático uniqueId.

En el ejemplo anterior, uniqueId se usa para dar a cada objeto Item un número único. Esto es fácil de hacer si cada objeto Item que se crea toma el valor actual en el campo estático uniqueId y luego lo incrementa en uno. El uso de un campo estático significa que cada objeto no necesita saber sobre los otros objetos para obtener un Identificación única. Esto podría ser útil si desea saber el orden en que se crearon los objetos Item.

¿Qué es una constante estática?

Las constantes estáticas son exactamente como los campos estáticos, excepto que sus valores no se pueden cambiar. En la declaración de campo, el final y estático Se utilizan ambos modificadores. Por ejemplo, quizás la clase Item debería imponer una restricción en la longitud del itemName. Podríamos crear una constante estática maxItemNameLength:

 Artículo de clase pública {


 Id privado int estático = 1;

 public static final int maxItemNameLength = 20;


 private int itemId;

 cadena privada itemName;


 Artículo público (String itemName) 

 {

 if (itemName.length ()> maxItemNameLength)

 {

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

 }

 más

 {

 this.itemName = itemName;

 }

 itemId = id;

 id ++;

 } } 

Al igual que con los campos estáticos, las constantes estáticas están asociadas con la clase en lugar de un objeto individual:

 clase estática de ejemplo público {


 public static void main (String [] args) {


 Item catFood = nuevo Item ("Whiskas");

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

 System.out.println (Item.maxItemNameLength);

 }

 }


Hay dos cosas importantes a tener en cuenta sobre la constante estática maxItemNameLength:

  • Se declara como un campo público. En general, es una mala idea hacer público un campo en cualquier clase que diseñe, pero en este caso, no importa. El valor de la constante no se puede cambiar.
  • La constante estática se usa desde el nombre de clase Item, no un objeto Item.

Las constantes estáticas se pueden ver en toda la API de Java. Por ejemplo, el clase de contenedor entero tiene dos que almacenan los valores máximos y mínimos un int tipo de datos puede tener:

 System.out.println ("El valor máximo para int es:" + Integer. VALOR MÁXIMO);

 System.out.println ("El valor mínimo para int es:" + Integer. MIN_VALUE);


 Salida:

 El valor máximo para int es: 2147483647

 El valor mínimo para int es: -2147483648


instagram story viewer