Contenido del curso

Construcción de clases y modelado de objetos

Métodos estáticos para clases utilitarias en Java

Resumen

Los atributos y métodos estáticos en Java permiten compartir información y comportamiento entre todas las instancias de una clase, sin depender de un objeto particular. Si estás aprendiendo programación orientada a objetos, entender la palabra reservada static te ayudará a escribir código más limpio, reutilizable y organizado.

¿Qué son los atributos y métodos estáticos en Java?

Cuando trabajas con clases, cada objeto tiene sus propios atributos y métodos. Pero a veces necesitas algo distinto: información o acciones que pertenezcan a la clase misma y no a una instancia específica. Ahí entra static.

La palabra reservada static indica que ese atributo o método no depende de ningún objeto, sino de la clase en general. Esto significa que puedes invocarlo directamente con el nombre de la clase, sin crear una instancia con new.

¿Cuándo usar static en Java? Úsalo cuando el valor o la acción no cambie entre objetos: contadores compartidos, validaciones, constantes o clases utilitarias que agrupan funciones reutilizables.

¿Cómo crear una clase utilitaria con métodos estáticos?

Un caso clásico es centralizar la captura de datos por consola con Scanner. En lugar de repetir el mismo código cada vez que pides un texto o un número, puedes crear una clase utilitaria que lo haga por ti.

Dentro del paquete platzi.play crea un nuevo paquete llamado util. Ahí vivirán las clases que no dependen del contexto de la plataforma de streaming. Dentro, agrega una clase llamada ScannerUtils.

¿Cómo se declara un atributo estático?

El Scanner lo declaras una sola vez como atributo estático de la clase. Así queda disponible para todos los métodos sin instanciarlo de nuevo:

java package platzi.play.util;

import java.util.Scanner;

public class ScannerUtils { public static Scanner scanner = new Scanner(System.in); }

Al marcarlo como public static, el scanner pertenece a la clase ScannerUtils y puedes acceder a él desde cualquier punto del proyecto.

¿Cómo se definen los métodos estáticos para capturar datos?

Dentro de la misma clase, agrega tres métodos estáticos: uno para texto, uno para enteros y uno para decimales. Cada uno muestra un mensaje, captura el dato y lo retorna.

java public static String capturarTexto(String mensaje) { System.out.println(mensaje + ": "); return scanner.nextLine(); }

public static int capturarNumero(String mensaje) { System.out.println(mensaje + ": "); int numero = scanner.nextInt(); scanner.nextLine(); return numero; }

public static double capturarDecimal(String mensaje) { System.out.println(mensaje + ": "); double decimal = scanner.nextDouble(); scanner.nextLine(); return decimal; }

Fíjate en un detalle importante: después de nextInt() y nextDouble() llamamos a scanner.nextLine(). Esto se hace para descartar el enter que queda en el buffer y evitar que el siguiente método lo lea como entrada vacía.

¿Por qué se usa scanner.nextLine() después de nextInt()? Porque nextInt() no consume el salto de línea que el usuario presiona al dar enter. Si no lo despreciamos, la siguiente captura de texto se rompe.

¿Cómo se usan los métodos estáticos desde el main?

Una vez que los métodos están marcados como static, puedes invocarlos directamente con el nombre de la clase, sin crear un objeto:

java String nombre = ScannerUtils.capturarTexto("Nombre del contenido"); String genero = ScannerUtils.capturarTexto("Género del contenido"); int duracion = ScannerUtils.capturarNumero("Duración del contenido"); double calificacion = ScannerUtils.capturarDecimal("Calificación del contenido");

Si un método no estuviera marcado como estático, el IDE no te lo sugeriría al escribir ScannerUtils., porque para invocarlo necesitarías instanciar primero un objeto con new ScannerUtils(). Esa es una pista práctica para identificar cuándo un método es estático.

Después usas las variables capturadas para construir tu objeto, por ejemplo una Pelicula con su título, género, duración y calificación, y eliminas los valores quemados como "El Señor de los Anillos" o 4.7 que tenías escritos directamente en el código.

¿Qué ventajas trae centralizar el Scanner en una clase utilitaria?

  • Eliminas duplicación: ya no repites new Scanner(System.in) ni el nextLine de limpieza en cada parte del código.
  • Tu main queda más legible, enfocado en la lógica del negocio y no en detalles técnicos de captura.
  • Puedes reutilizar ScannerUtils en cualquier clase del proyecto, importándola una sola vez.
  • Si mañana cambias la forma de capturar datos, modificas un único lugar.

Al ejecutar el programa, la consola te pedirá nombre, género, duración y calificación. Escribes "El Señor de los Anillos", "fantasía", 200 y 4.7, y el programa imprime la ficha técnica con esos valores capturados dinámicamente, sin nada quemado en el código.

¿Para qué casos reales sirven los atributos y métodos estáticos?

Los atributos y métodos estáticos son útiles cuando necesitas:

  • Llevar conteos compartidos entre todos los objetos de una clase.
  • Implementar validaciones que no dependen de una instancia.
  • Construir clases utilitarias como ScannerUtils, Math o helpers de formato.
  • Exponer configuraciones que sean iguales para toda la aplicación.

El siguiente paso natural cuando trabajas con static es entender las constantes: valores que nunca cambian durante la ejecución del programa. ¿Ya las has usado en algún proyecto? Cuéntame en los comentarios qué clase utilitaria crearías tú primero.