Contenido del curso
Pensando en objetos
Construcción de clases y modelado de objetos
- 10

Métodos estáticos para clases utilitarias en Java
Viendo ahora - 11

Constantes en Java: inmutabilidad con static final
04:08 min - 12

Constructores en Java para objetos con datos
08:10 min - 13

Gestión de memoria en Java: stack, heap y garbage collector
07:04 min - 14

Encapsulamiento en Java: Atributos privados y métodos getter y setter
09:26 min - 15

Listas en Java: agregar, recorrer y eliminar
11:12 min - 16

Asociación, agregación y composición en Java
03:45 min - 17

Menú interactivo en Java con switch
11:37 min - 18

Buscar y eliminar películas en Java
09:20 min
Estructuras de datos y Java moderno
- 19

Streams y lambdas para filtrar listas en Java
11:55 min - 20

Ordenar y transformar listas con streams en Java
11:49 min - 21

Validación de entrada con enums en Java
11:56 min - 22

Excepciones personalizadas en Java
08:16 min - 23

Records para simplificar código inmutable en Java
06:59 min - 24

Mapas en Java para contar visualizaciones de películas
09:47 min - 25

Leer archivos planos con Java nio
13:48 min - 26

Escribir en archivos planos con Files.writeString
09:50 min
Reutilización y diseño orientado a 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 elnextLinede limpieza en cada parte del código. - Tu
mainqueda más legible, enfocado en la lógica del negocio y no en detalles técnicos de captura. - Puedes reutilizar
ScannerUtilsen 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,Matho 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.