Introducción a Java – modo principiante

1 Introducción a Java y la Máquina Virtual
Concepto: Entender el ecosistema de Java. No es solo un lenguaje, es una plataforma con la filosofía «Escribe una vez, ejecuta donde sea».
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).

Detalles técnicos
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.
El Flujo de Trabajo a Bajo Nivel.
En este proceso interactúan dos tipos de archivos fundamentales:
.java(El Código Fuente): El archivo de texto plano que creamos en Notepad++. El nombre del archivo debe coincidir exactamente con el nombre de la clase pública (public class), respetando mayúsculas y minúsculas..class(El Bytecode): Archivo generado automáticamente tras compilar. Es ilegible para nosotros, pero la Máquina Virtual de Java (JVM) lo traduce a código máquina en milisegundos usando su compilador JIT (Just-In-Time).

Ejerccio 1 – El «Hola Mundo» desde Notepad++ y CMD
Reto: Crear el primer programa, guardarlo, compilarlo y ejecutarlo sin usar un IDE.
Escribir en Notepad++:
public class Presentacion {
public static void main(String[] args) {
// Mi primer programa en Java
System.out.println("¡Hola, mundo!");
System.out.println("Mi nombre es Carlos y este es mi primer programa en Java.");
}
}Guardar: Crear una carpeta en D:\ClasesJava y guardar el archivo exactamente como Presentacion.java.
Compilar y Ejecutar en CMD:
cd C:\ClasesJava
javac Presentacion.java
java PresentacionNota: El comando javac crea el archivo Presentacion.class. Al usar el comando java para ejecutar, no se escribe la extensión .class.
2 Variables, Tipos de Datos y la Memoria
Concepto: Cómo Java gestiona la información y la importancia de su rigurosidad con la memoria.
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.
Detalle Técnico
(Tipado Estático, Fuerte y Límites): Java exige saber exactamente cuánta memoria reservará. Por ejemplo, un int ocupa 32 bits, lo que significa que solo puede almacenar números hasta el 2,147,483,647. Si necesitas números más grandes, debes usar long (64 bits). Además, no puedes asignar texto a una variable numérica sin una conversión explícita, lo que previene miles de errores.
Ejercicio 2 – El Formulario Falso y Concatenación
Reto: Crear variables para simular un registro de usuario e imprimir un párrafo concatenando todo.
public class Formulario {
public static void main(String[] args) {
String nombre = "Juan";
int edad = 25;
double estatura = 1.75;
boolean estaSuscrito = true;
System.out.println("El usuario " + nombre + " tiene " + edad +
" años, mide " + estatura + "m y su suscripción es: " + estaSuscrito);
}
}Ahora intenta asignar un decimal a un entero para analizar el error del compilador.
int numero = 5.5; (La consola mostrará incompatible types: possible lossy conversion from double to int).
3 Operadores, Scanner y el Buffer de Teclado
Concepto: Matemáticas en programación y la interacción real con el usuario mediante la consola.
Historia del Scanner: Antes de Java 1.5 (2004), leer datos requería clases complejas y verbosas como BufferedReader y manejo obligatorio de excepciones. Scanner se introdujo para facilitar la enseñanza y lectura de flujos simples.
Detalle Técnico
(El problema del Buffer): Al usar nextInt() y presionar «Enter», Java lee el número pero deja el salto de línea (\n) inyectado en la memoria (buffer). Si luego usas nextLine() para leer un texto, Java lee ese salto fantasma y se salta el turno del usuario. Se soluciona limpiando el buffer invocando un nextLine() vacío.
Ejercicio 3 – Calculadora de Edad
Reto: Leer año de nacimiento y calcular la edad.
import java.util.Scanner;
public class CalculadoraEdad {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Ingresa tu año de nacimiento: ");
int anioNacimiento = sc.nextInt();
int anioActual = 2026;
int edad = anioActual - anioNacimiento;
System.out.println("Tu edad aproximada es: " + edad + " años.");
}
}El problema del Buffer en acción….
import java.util.Scanner;
public class LimpiezaBuffer {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Ingresa tu edad: ");
int edad = sc.nextInt();
sc.nextLine(); // LIMPIEZA DEL BUFFER CRUCIAL
System.out.print("Ingresa tu nombre completo: ");
String nombre = sc.nextLine();
System.out.println(nombre + " tiene " + edad + " años.");
}
}4 Lógica de Decisiones (Condicionales)



Dato Curioso: Originalmente, la estructura switch solo aceptaba números enteros y caracteres simples. Desde la versión Java 7, acepta cadenas de texto (String), revolucionando la creación de menús interactivos.
Detalle Técnico
En Java se usan los operadores lógicos && (AND) y || (OR). Tienen una propiedad de «cortocircuito»: con el &&, si la primera condición es falsa, Java ni siquiera se molesta en leer o evaluar la segunda, ahorrando procesamiento computacional y previniendo errores de ejecución.
Ejercicio 4 – Validador de Par/Impar
Usar el operador módulo (%) para saber si un número es par.
import java.util.Scanner;
public class ParImpar {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Ingresa un número: ");
int num = sc.nextInt();
if (num % 2 == 0) {
System.out.println("El número es PAR.");
} else {
System.out.println("El número es IMPAR.");
}
}
}Ejercicio 5 – Menú de Restaurante (Switch)
import java.util.Scanner;
public class MenuRestaurante {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("1. Pizza | 2. Hamburguesa | 3. Ensalada");
System.out.print("Elige una opción: ");
int opcion = sc.nextInt();
switch (opcion) {
case 1: System.out.println("Pizza: $10.00"); break;
case 2: System.out.println("Hamburguesa: $8.00"); break;
case 3: System.out.println("Ensalada: $5.00"); break;
default: System.out.println("Opción no válida.");
}
}
}5 Iteraciones y Control de Flujo (Bucles)
Concepto: La automatización de tareas repetitivas.
Historia: La sintaxis del bucle for es idéntica a la de C/C++. Fue una decisión de diseño deliberada de Gosling en los 90s para que la curva de aprendizaje de los programadores de C fuera casi nula al migrar a Java
Detalle Técnico:
for: Usado cuando sabes la cantidad exacta de iteraciones que harás
while: Evalúa antes de ejecutar (puede iterar cero veces)
do-while: Ejecuta el bloque al menos una vez antes de evaluar la condición (la estructura perfecta para pintar menús en consola).

Ejercicio 6 – Tabla de Multiplicar (Bucle For)
Imprimir la tabla de un número ingresado del 1 al 10.
import java.util.Scanner;
public class TablaMultiplicar {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("¿Qué tabla deseas ver?: ");
int base = sc.nextInt();
for (int i = 1; i <= 10; i++) {
System.out.println(base + " x " + i + " = " + (base * i));
}
}
}Ejercicio 7 -Validación de Contraseña (Bucle While)
Pedir clave cíclicamente hasta que se ingrese «1234».
import java.util.Scanner;
public class ValidadorClave {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String clave = "";
// El bucle se repite MIENTRAS la clave NO sea "1234"
while (!clave.equals("1234")) {
System.out.print("Ingresa la contraseña: ");
clave = sc.nextLine();
}
System.out.println("¡Acceso concedido!");
}
}6 Proyecto Final Integrador (Calculadora Básica)
Concepto: Unir la declaración de variables, entrada de datos, condicionales y bucles en una sola aplicación interactiva y funcional.
El Reto de la División por Cero (Comportamiento de la JVM): En matemáticas, la división por cero es indefinida. En Java:
Si divides enteros (10 / 0), la JVM lanza una excepción (ArithmeticException) y el programa «crashea».
Si divides decimales tipo double (10.0 / 0.0), el programa no colapsa, sino que devuelve una constante especial llamada Infinity. Para evitar resultados extraños, nuestra calculadora valida manualmente el divisor en la opción 4.
import java.util.Scanner;
public class CalculadoraFinal {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int opcion;
double num1, num2, resultado;
// do-while garantiza que el menú se imprima antes de pedir una opción
do {
System.out.println("\n=== CALCULADORA BÁSICA ===");
System.out.println("1. Sumar");
System.out.println("2. Restar");
System.out.println("3. Multiplicar");
System.out.println("4. Dividir");
System.out.println("5. Salir");
System.out.print("Elige una opción: ");
opcion = scanner.nextInt();
// Salida temprana
if (opcion == 5) {
System.out.println("¡Cerrando sistema... Hasta luego!");
break; // Rompe el bucle de inmediato
}
// Validación de opciones fuera de rango
if (opcion < 1 || opcion > 5) {
System.out.println("Error: Opción no válida. Intenta de nuevo.");
continue; // Salta el resto del código y vuelve a evaluar el do-while
}
System.out.print("Ingresa el primer número: ");
num1 = scanner.nextDouble();
System.out.print("Ingresa el segundo número: ");
num2 = scanner.nextDouble();
// Procesamiento aritmético
switch (opcion) {
case 1:
resultado = num1 + num2;
System.out.println("Resultado: " + resultado);
break;
case 2:
resultado = num1 - num2;
System.out.println("Resultado: " + resultado);
break;
case 3:
resultado = num1 * num2;
System.out.println("Resultado: " + resultado);
break;
case 4:
if (num2 == 0) {
System.out.println("Error matemático: No se puede dividir entre cero.");
} else {
resultado = num1 / num2;
System.out.println("Resultado: " + resultado);
}
break;
}
} while (opcion != 5);
scanner.close(); // Liberación del recurso de memoria del teclado
}
}