¿Quieres saber cómo puedes utilizar los campos estáticos en Java?

Puede haber ocasiones en las que sea útil tener valores que se compartan entre todas las instancias de una clase en particular. Los campos estáticos y las constantes estáticas permiten este tipo de compartición al pertenecer a la clase y no a los objetos reales.

 

El modificador estático

Normalmente, los campos y métodos definidos en una clase sólo pueden utilizarse cuando se ha creado un objeto de ese tipo de clase. Por ejemplo, considere una simple clase de posición que realice un seguimiento de las mercancías en una tienda:

 

 public class Item {

  private String itemName;

  public Item(String itemName)

  {

    this.itemName = itemName;

  }

  public String getItemName()

  {

    return itemName;

  }

}

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

 

 public class StaticExample {

  public static void main(String[] args) {

    Item catFood = new Item("Whiskas");

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

  }

}

 

Sin embargo, si el modificador estático está incluido en una declaración de campo o método, no se requiere ninguna instancia de la clase para utilizar el campo o método - están asociados con la clase y no con un objeto individual. Si observa el ejemplo anterior, verá que el modificador estático ya se está utilizando en la declaración del método principal:

 

 public static void main(String[] args) { 

 

El método principal es un método estático que no requiere que un objeto exista antes de que pueda ser llamado. Como main() es el punto de partida de cualquier aplicación Java, de hecho no hay ningún objeto ya existente para llamarlo. Usted podría, si le apetece tener un programa que continuamente se llama a sí mismo, hacer esto:

 public class StaticExample {

  public static void main(String[] args) {

    String[] s = {"random","string"};

    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 Artículo y agreguemos un campo estático:

 public class Item {

  //static field uniqueId

  private static int uniqueId = 1;

  private int itemId;

  private String itemName;

  public Item(String itemName)

  {

    this.itemName = itemName;

    itemId = uniqueId;

    uniqueId++;

  }

}

 

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

 

El campo estático uniqueId, sin embargo, contiene un valor que será el mismo para todos los objetos Item. Si hay 100 objetos Item, habrá 100 instancias de los campos itemId y itemName, pero sólo un campo estático uniqueId.

En el ejemplo anterior, uniqueId se utiliza 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 uniqueId static y luego lo incrementa en uno. El uso de un campo estático significa que cada objeto no necesita saber acerca de los otros objetos para obtener una identificación única. Esto puede ser útil si desea saber el orden en el que se crearon los objetos Item.

 

¿Qué es una constante estática?

Las constantes estáticas son exactamente igual que los campos estáticos, excepto que sus valores no se pueden cambiar. En la declaración de campo se utilizan tanto los modificadores finales como los estáticos. 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:

 

 public class Item {

  private static int id = 1;

  public static final int maxItemNameLength = 20;

  private int itemId;

  private String itemName;

  public Item(String itemName)

  {

    if (itemName.length() > maxItemNameLength)

    {

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

    }

    else

    {

      this.itemName = itemName;

    }

    itemId = id;

    id++;

  } }

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

 

 public class StaticExample {

  public static void main(String[] args) {

    Item catFood = new Item("Whiskas");

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

    System.out.println(Item.maxItemNameLength);

    }

}

 

Hay dos cosas importantes que hay que tener en cuenta acerca de la constante estática maxItemNameLength:

 

  • Está declarado como un campo público. Generalmente es una mala idea hacer público un campo en cualquier clase que diseñes, pero en este caso, no importa. El valor de la constante no se puede modificar.
  • La constante estática se utiliza a partir del nombre de clase Artículo, no de un objeto Artículo.

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

 

 System.out.println("The max value for int is: " + Integer.MAX_VALUE);

System.out.println("The min value for int is: " + Integer.MIN_VALUE);

Output:

The max value for int is: 2147483647

The min value for int is: -2147483648

(0 votes)