Como ya has visto en ocasiones anteriores, un método estático es un método que puede ser usado directamente desde la clase, sin necesidad de tener que crear una instancia para poder utilizar al método. También son conocidos como métodos de clase (como sucedía con los atributos de clase), frente a los métodos de objeto (es necesario un objeto para poder disponer de ellos).
Los métodos estáticos no pueden manipular atributos de instancias (objetos) sino atributos estáticos (de clase) y suelen ser utilizados para realizar operaciones comunes a todos los objetos de la clase, más que para una instancia concreta.
Algunos ejemplos de operaciones que suelen realizarse desde métodos estáticos:
- Acceso a atributos específicos de clase: incremento o decremento de contadores internos de la clase (no de instancias), acceso a un posible atributo de nombre de la clase, etc.
- Operaciones genéricas relacionadas con la clase pero que no utilizan atributos de instancia. Por ejemplo una clase NIF (o DNI) que permite trabajar con el DNI y la letra del NIF y que proporciona funciones adicionales para calcular la letra NIF de un número de DNI que se le pase como parámetro. Ese método puede ser interesante para ser usado desde fuera de la clase de manera independiente a la existencia de objetos de tipo NIF.
En la biblioteca de Java es muy habitual encontrarse con clases que proporcionan métodos estáticos que pueden resultar muy útiles para cálculos auxiliares, conversiones de tipos, etc. Por ejemplo, la mayoría de las clases del paquete java.lang
que representan tipos (Integer, String, Float, Double, Boolean,
etc.) ofrecen métodos estáticos para hacer conversiones. Aquí tienes algunos ejemplos:
static String valueOf (int i)
. Devuelve la representación en formatoString
(cadena) de un valorint
. Se trata de un método que no tiene que ver nada en absoluto con instancias de concretas deString
, sino de un método auxiliar que puede servir como herramienta para ser usada desde otras clases. Se utilizaría directamente con el nombre de la clase. Por ejemplo:String enteroCadena= String.valueOf (23).
static String valueOf (float f)
. Algo similar para un valor de tipofloat
. Ejemplo de uso:String floatCadena= String.valueOf (24.341).
static int parseInt (String s)
. En este caso se trata de un método estático de la claseInteger
. Analiza la cadena pasada como parámetro y la transforma en unint
. Ejemplo de uso:int cadenaEntero= Integer.parseInt ("-12").
Todos los ejemplos anteriores son casos en los que se utiliza directamente la clase como una especie de caja de herramientas que contiene métodos que pueden ser utilizados desde cualquier parte, por eso suelen ser métodos públicos.