¿Qué es java.lang.System y cuáles son sus principales funciones en Java?

| Última modificación: 16 de diciembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Un día de esos cualquiera en los que estaba programando en Java, me di cuenta de que necesitaba con urgencia interactuar con el sistema operativo y con la máquina virtual de Java, pero no sabía cómo. De hecho, terminaba encontrándome con varios problemas al gestionar la entrada y salida de datos, copiar arrays u obtener el tiempo actual en milisegundos. Cansado de eso decidí aprender a usar java.lang.System y realmente me ayudó muchísimo con estos inconvenientes. Te explicaré qué es y cuáles son sus principales funciones, porque si estás aprendiendo a programar con Java, no la puedes pasar por alto.

java.lang.System qué es

¿Qué es java.lang.System?

Java.lang.System es una clase con la que puedes proporcionar métodos y atributos estáticos para interactuar con el sistema subyacente, ya sea el sistema operativo o la máquina virtual de Java (JVM).

Te lo pongo en palabras mucho más simples: es como una caja de herramientas con la que tienes acceso a las cosas importantes del sistema, como la consola y las variables del entorno.

Esto es lo que puedes hacer con java.lang.System:

  • Gestionar flujos de entrada y salida (cómo leer y escribir datos en la consola).
  • Manipular variables de entorno y propiedades del sistema.
  • Copiar arrays.
  • Obtener el tiempo actual en milisegundos o nanosegundos.
  • Gestionar la recolección de basura (garbage collection).
  • Finalizar programas de manera explícita.

Voy a explicarte cada una de sus funciones por medio de ejemplos sencillos.

Principales funciones de java.lang.System

Gestionar flujos de entrada y salida

Algo que debes recordar muy bien es que la clase java.lang.System te brinda tres flujos principales:

  • System.out: Te sirve para imprimir en la consola.
  • System.err: Úsalo Para imprimir errores en la consola.
  • System.in: Es muy bueno para leer datos de la consola.

Imprime mensajes en consola con System.out

System.out.println("Hola, mundo!");
System.out.printf("Formato: %.2f", 3.14159);

Imprime errores con System.err

System.err.println("¡Ocurrió un error inesperado!");

Lee datos desde la consola con System.in

import java.util.Scanner;

Scanner scanner = new Scanner(System.in);
System.out.print("Escribe tu nombre: ");
String nombre = scanner.nextLine();
System.out.println("Hola, " + nombre + "!");

Lo bueno es que puedes redirigir estos flujos a archivos u otras fuentes si lo consideras necesario. Solo usa System.setOut o System.setErr.

Copia arrays fácilmente

Te contaba que con System.arraycopy puedes copiar elementos de un array a otro de forma fácil y rápida.

int[] origen = {1, 2, 3, 4, 5};
int[] destino = new int[5];

System.arraycopy(origen, 0, destino, 0, origen.length);

for (int num : destino) {
    System.out.println(num);
}

Créeme que este método es muy bueno para mover datos en grandes estructuras y lo mejor es que no perderás el rendimiento.

Propiedades y variables de entorno

Obtén propiedades del sistema

Te aconsejo usar System.getProperty para que accedas a información como el usuario actual o la versión de Java.

System.out.println("Usuario: " + System.getProperty("user.name"));
System.out.println("Versión de Java: " + System.getProperty("java.version"));

Trabaja con variables de entorno

No olvides que las variables de entorno son accesibles a través de System.getenv:

System.out.println("PATH: " + System.getenv("PATH"));

Finaliza el programa

Lo bueno es que el programa se deja finalizar manualmente con System.exit, solo debes especificar un código de salida.

if (args.length == 0) {
    System.out.println("No se proporcionaron argumentos.");
    System.exit(1);
}

Recuerda que un código de salida igual a 0 indica éxito, mientras que cualquier otro valor indica un error.

Gestiona la recolección de basura

Puede que la JVM administre automáticamente la memoria, pero te recomiendo sugerirle que ejecute el recolector de basura con System.gc.

System.gc();
System.out.println("Recolección de basura solicitada.");

Algunos consejos básicos a la hora de usar java.lang.System

  • No abuses de System.exit: Sí, es una maravilla, pero tampoco lo uses todo el tiempo. Recuerda que puede causar problemas si se usa en entornos como aplicaciones web.
  • No cierres flujos estándar: Ojo aquí, no cierres System.in, System.out o System.err porque puedes afectar otras partes del programa.
  • Valida los datos de entrada: Siempre, pero siempre que uses System.in, maneja los errores para evitar esos bloqueos molestos.

Yo creo que ya entendiste que la clase java.lang.System es sumamente importante en el ecosistema de Java. Aprende bien sus funciones para que logres escribir programas más eficientes y gestiones de una forma muy fácil la interacción entre tu código y el sistema operativo.

Te aconsejo aprender mucho más sobre Java y convertirte en un desarrollador Java Full Stack. Nosotros te ofrecemos un Bootcamp intensivo que te llevará de cero a experto en tiempo récord. ¡Apúntate ahora mismo y transforma tu carrera profesional!

Ramón Maldonado

Full Stack Developer y Responsable de Formación base en KeepCoding.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Java y Spring Boot

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado