Java – Parte 1 – Introducción – Datos Primitivos

Bienvenido al mundo de Java, uno de los lenguajes de programación más robustos, seguros y utilizados en el ámbito empresarial a nivel global. En esta sesión, no solo aprenderemos a escribir nuestro primer programa, sino que desentrañaremos cómo Java interactúa con la máquina a nivel arquitectónico.

Historia: Nació en 1991 en Sun Microsystems (ahora Oracle) como «Proyecto Green». Originalmente se llamaba Oak (Roble), pero por problemas de registro se cambió a «Java» en honor al café de Indonesia que consumían sus creadores (de ahí el logo).

Convención de Nombres (CamelCase): En Java, los nombres de las Clases siempre empiezan con mayúscula (CalculadoraBasica, llamado UpperCamelCase). Las variables y métodos empiezan con minúscula (numeroIngresado, llamado lowerCamelCase).

Comentarios: El código no documentado es código muerto. Se usa // para comentarios de una línea y /* ... */ para bloques de múltiples líneas.

1 La Arquitectura de Java: JDK, JRE y JVM

Para programar en Java como un profesional, es crucial entender su ecosistema. Java no compila directamente a código máquina (código binario específico para un procesador como x86 o ARM), sino que utiliza un enfoque híbrido de dos pasos.

El Principio WORA: Write Once, Run Anywhere (Escribe una vez, ejecuta donde sea). Este es el superpoder de Java. Puedes escribir y compilar tu código en Windows, y ese mismo archivo compilado se ejecutará en Linux o macOS sin modificar una sola línea.

El Compilador (javac): Transforma nuestro código fuente legible por humanos (archivos .java) en Bytecode (archivos .class). El bytecode es un conjunto de instrucciones optimizadas, pero independientes de la plataforma.

JVM (Java Virtual Machine): Es el corazón de Java. Es una máquina virtual que simula ser una computadora real. La JVM toma el bytecode y lo traduce en tiempo real a instrucciones de código máquina nativas del sistema operativo donde se está ejecutando. Esto lo logra en gran parte gracias al JIT Compiler (Just-In-Time), que optimiza las traducciones sobre la marcha para mejorar el rendimiento.

JRE (Java Runtime Environment): Es el entorno de ejecución. Contiene la JVM y las bibliotecas estándar de Java (Standard Library) necesarias para ejecutar programas Java. Si solo quieres usar una app hecha en Java, solo necesitas el JRE.

JDK (Java Development Kit): Es el kit completo para desarrolladores. Contiene el JRE (para ejecutar), la JVM, y herramientas de desarrollo como el compilador (javac), el empaquetador (jar), y herramientas de depuración (debuggers).

2 Anatomía del Código: Diseccionando el «Hola Mundo»

Vamos a analizar la estructura mínima viable de un programa en Java. Crea un archivo llamado HolaMundo.java

public class HolaMundo {
    public static void main(String[] args) {
        System.out.println("¡Hola, mundo Java!");
    }
}

¿Qué hace cada palabra reservada?

public: Es un modificador de acceso. Indica que esta clase es pública y accesible desde otras partes del programa o por la propia JVM para iniciar la ejecución.

class: Define que estamos creando una «Clase». En Java, que es un lenguaje puramente Orientado a Objetos, todo código debe existir dentro de una clase.

HolaMundo: El identificador (nombre) de la clase.

Regla de oro: El nombre de la clase pública debe coincidir exactamente con el nombre del archivo (HolaMundo.java).

static: Permite que el método main sea invocado por la JVM sin necesidad de crear (instanciar) un objeto previo de la clase HolaMundo.

void: Indica que este método ejecuta una acción pero no «devuelve» ningún dato al finalizar.

main: Es el nombre del método. La JVM está programada estrictamente para buscar un método llamado main con esta firma exacta como punto de partida del programa.

String[] args: Es un arreglo (array) de cadenas de texto. Permite recibir argumentos desde la línea de comandos cuando ejecutamos el programa.

System.out.println(…): Es la instrucción para imprimir texto en la salida estándar (la consola) y añadir un salto de línea al final.

3 Variables, Tipos de Datos Primitivos y Gestión de Memoria

Java es un lenguaje de tipado estático y fuerte. Esto significa que toda variable debe ser declarada con un tipo de dato específico en tiempo de compilación, y el compilador es estricto en cuanto a qué valores pueden almacenarse en ella.

La memoria en Java divide la información, pero para los tipos primitivos, los valores se almacenan directamente en una zona de memoria muy rápida llamada Stack (Pila).

Tipos Primitivos (Los 8 fundamentales):

1 Enteros:

  • byte: 8 bits (-128 a 127). Útil para ahorrar memoria en grandes arreglos.
  • short: 16 bits (-32,768 a 32,767).
  • int: 32 bits (aprox. -2 billones a 2 billones). Es el estándar por defecto.
  • long: 64 bits. Para números masivos. (Requiere sufijo ‘L’, ej: 3000000000L).

2 Punto Flotante (Decimales):

  • float: 32 bits. Precisión simple (Requiere sufijo ‘f’, ej: 3.14f).
  • double: 64 bits. Precisión doble. Estándar por defecto para decimales.

3 Caracteres y Booleanos:

  • char: 16 bits. Almacena un solo carácter Unicode (ej: ‘A’). Usa comillas simples.
  • boolean: Representa un valor de verdad: true (verdadero) o false (falso).

int edad = 28;
double temperatura = 36.5;
boolean sistemaActivo = true;
char inicial = 'W';

4 Dato Curioso: En Java «todo es un objeto»… excepto los tipos primitivos (int, double, char, boolean). Se mantuvieron así (heredados de C/C++) estrictamente por razones de rendimiento y velocidad.

4 Operadores

Java nos permite operar sobre estas variables. Además de los:

Aritmeticos 
(+, -, *, /, % para el residuo)

Relacionales 
(==, !=, >, <)

Lógicos
(&& AND, || OR, ! NOT)

int numeroEntero = 100;
double numeroDecimal = numeroEntero; // Automáticamente se convierte a 100.0