Java compila tu código a bytecode, que ejecuta la máquina virtual de Java (JVM) en cualquier sistema. Es uno de los lenguajes más usados en empresas y bancos, en servidores y en el ecosistema de Android. Es más estricto que Python o JavaScript, y eso ayuda a detectar errores pronto.
Aplicaciones de empresa y servidores
Aplicaciones Android
Procesamiento de datos a gran escala
Para empezar: Instala un JDK (por ejemplo, desde dev.java). Los fragmentos de las lecciones puedes probarlos en jshell, la consola interactiva que viene con el JDK, o dentro del main del primer ejemplo.
Nivel 1 Básico
1
Lección 1 · Básico
Tu primer programa
En Java todo el código vive dentro de una clase, y el programa empieza en el método main. System.out.println() escribe una línea en la consola.
El compilador javac traduce el código a bytecode y la JVM lo ejecuta. Desde Java 11 puedes hacer las dos cosas de una vez con java Main.java.
Ejemplo práctico
// Main.java
public class Main {
public static void main(String[] args) {
System.out.println("¡Hola, mundo!");
System.out.println(2 + 3); // 5
}
}
// En la terminal: java Main.java
Ejercicio
Completa la instrucción que escribe una línea.
System.out.("Hola");
Ver la solución
Respuesta:println. System.out.println() escribe el texto y salta de línea.
2
Lección 2 · Básico
Variables y tipos
Java es de tipado estático: cada variable tiene un tipo fijo. Los más comunes son int (enteros), double (decimales), boolean y String (texto, con comillas dobles).
Con var el compilador deduce el tipo a partir del valor, pero sigue siendo fijo: no puedes guardar después un texto en una variable que empezó siendo un número.
Ejemplo práctico
int unidades = 3;
double precio = 19.99;
boolean enStock = true;
String producto = "Auriculares";
var total = unidades * precio; // double
System.out.println(producto + ": " + total);
Ejercicio
¿Qué tipo usarías para guardar 19,99?
Ver la solución
Respuesta: double. int solo guarda enteros; para decimales se usa double.
3
Lección 3 · Básico
Condiciones y switch
if y else funcionan como en otros lenguajes, con la condición entre paréntesis y el bloque entre llaves. Los textos se comparan con .equals(), no con ==.
La expresión switch con flechas (Java 14 o posterior) elige un valor según varios casos de forma compacta.
Ejemplo práctico
String dia = "sábado";
if (dia.equals("sábado") || dia.equals("domingo")) {
System.out.println("Fin de semana");
}
int horas = switch (dia) {
case "sábado", "domingo" -> 0;
case "viernes" -> 6;
default -> 8;
};
Ejercicio
¿Cómo se comprueba si dos textos son iguales en Java?
Ver la solución
Respuesta: a.equals(b). == compara si son el mismo objeto en memoria; .equals() compara su contenido.
4
Lección 4 · Básico
Arrays y bucles
Un array tiene un tamaño fijo y un único tipo: int[] notas = {7, 8, 9};. Las posiciones empiezan en 0 y .length dice cuántas hay.
El for clásico usa un contador; el for mejorado (for (int n : notas)) recorre cada elemento directamente.
Ejemplo práctico
int[] notas = {7, 8, 9};
int suma = 0;
for (int nota : notas) {
suma += nota;
}
System.out.println("Media: " + (double) suma / notas.length); // 8.0
for (int i = 3; i > 0; i--) {
System.out.println(i);
}
Ejercicio
En int[] notas = {7, 8, 9}, ¿qué vale notas[1]?
Ver la solución
Respuesta: 8. La posición 0 es la primera (7), así que la 1 es la segunda: 8.
Nivel 2 Intermedio
5
Lección 5 · Intermedio
Métodos
Un método es una función dentro de una clase. Se declara con el tipo que devuelve (void si no devuelve nada), su nombre y sus parámetros con tipo.
Los métodos static pertenecen a la clase y se llaman sin crear un objeto, como main.
Respuesta:void. void indica que el método no devuelve ningún valor.
6
Lección 6 · Intermedio
Clases, objetos y records
Una clase define los datos (atributos) y el comportamiento (métodos) de un tipo de objeto. El constructor, con el mismo nombre que la clase, prepara cada objeto creado con new.
Para clases que solo guardan datos, un record (Java 16 o posterior) genera solo el constructor, los métodos de acceso, equals y toString.
Ejemplo práctico
class Cuenta {
private double saldo;
Cuenta(double saldoInicial) {
saldo = saldoInicial;
}
void ingresar(double cantidad) { saldo += cantidad; }
double getSaldo() { return saldo; }
}
record Producto(String nombre, double precio) {}
Cuenta c = new Cuenta(100);
c.ingresar(50);
System.out.println(c.getSaldo()); // 150.0
System.out.println(new Producto("Ratón", 12.5)); // Producto[nombre=Ratón, precio=12.5]
Ejercicio
¿Qué palabra crea un objeto nuevo a partir de una clase?
Ver la solución
Respuesta: new. new Clase(...) reserva el objeto y ejecuta su constructor.
7
Lección 7 · Intermedio
Colecciones: List y Map
Las colecciones crecen según lo necesites. ArrayList es una lista ordenada y HashMap guarda pares clave–valor. Se indica el tipo de los elementos entre < y >.
List.of() y Map.of() crean colecciones que no se pueden modificar, útiles para datos fijos.
Ejemplo práctico
import java.util.*;
List<String> tareas = new ArrayList<>();
tareas.add("Comprar pan");
tareas.add("Llamar al médico");
Map<String, Integer> stock = new HashMap<>();
stock.put("teclado", 10);
stock.put("raton", 0);
System.out.println(tareas.size()); // 2
System.out.println(stock.getOrDefault("webcam", 0)); // 0
Ejercicio
Necesitas buscar el precio de un producto por su nombre. ¿Qué colección usas?
Ver la solución
Respuesta: HashMap. Un Map asocia cada clave (el nombre) con su valor (el precio).
Nivel 3 Avanzado
8
Lección 8 · Avanzado
Herencia e interfaces
Una clase puede heredar de otra con extends y reutilizar su código, pero solo de una. Una interfaz define métodos que las clases se comprometen a tener con implements, y una clase puede implementar varias.
Así puedes tratar objetos distintos de la misma forma: una lista de Figura puede contener círculos y rectángulos.
Ejemplo práctico
interface Figura {
double area();
}
record Circulo(double radio) implements Figura {
public double area() { return Math.PI * radio * radio; }
}
record Rectangulo(double ancho, double alto) implements Figura {
public double area() { return ancho * alto; }
}
List<Figura> figuras = List.of(new Circulo(1), new Rectangulo(2, 3));
for (Figura f : figuras) System.out.println(f.area());
Ejercicio
Completa para que la clase cumpla la interfaz Figura.
class Cuadrado Figura { … }
Ver la solución
Respuesta:implements. Una clase implementa una interfaz con implements; hereda de otra clase con extends.
9
Lección 9 · Avanzado
Excepciones
Cuando algo falla, Java lanza una excepción. Con try y catch la capturas; finally se ejecuta siempre. Algunas excepciones (las comprobadas, como IOException) el compilador te obliga a tratarlas o declararlas.
try-with-resources cierra automáticamente archivos y conexiones al terminar.
Ejemplo práctico
import java.nio.file.*;
import java.io.IOException;
try (var lineas = Files.lines(Path.of("datos.txt"))) {
System.out.println(lineas.count() + " líneas");
} catch (IOException e) {
System.out.println("No se pudo leer: " + e.getMessage());
}
try {
int n = Integer.parseInt("doce");
} catch (NumberFormatException e) {
System.out.println("No es un número");
}
Ejercicio
¿Qué bloque se ejecuta siempre, haya error o no?
Ver la solución
Respuesta: finally. finally se ejecuta al salir del try, tanto si hubo excepción como si no.
10
Lección 10 · Avanzado
Lambdas y streams
Una lambda es una función corta que se pasa como dato: p -> p.precio() > 10. Los streams encadenan operaciones sobre colecciones: filtrar, transformar, ordenar y reunir el resultado.
El código queda más declarativo: dices qué quieres obtener, no cómo recorrer la lista paso a paso.
Ejemplo práctico
record Producto(String nombre, double precio) {}
var productos = List.of(
new Producto("Teclado", 25.9),
new Producto("Ratón", 12.5),
new Producto("Cable", 4.99));
List<String> caros = productos.stream()
.filter(p -> p.precio() > 10)
.map(Producto::nombre)
.sorted()
.toList(); // Java 16+
System.out.println(caros); // [Ratón, Teclado]
Ejercicio
¿Qué operación de un stream se queda solo con algunos elementos?
Ver la solución
Respuesta: filter. filter conserva los elementos para los que la lambda devuelve true.
¿Has terminado? Sigue practicando
Repasa los conceptos en el diccionario, practica con estas herramientas o prueba otro lenguaje: las ideas que has aprendido (variables, condiciones, funciones, objetos…) te servirán en cualquiera.
* Porcentaje de personas que dijeron haber usado Java en la Stack Overflow Developer Survey 2026: Technology (pregunta sobre lenguajes de programación, de scripts y de marcado; todas las respuestas). El progreso de las lecciones se guarda solo en este navegador.
¿Nos dejas medir las visitas?
Con tu permiso usamos Google Analytics, que guarda cookies, para saber cuántas personas visitan la web y qué páginas les resultan útiles. No usamos cookies de publicidad y tus archivos nunca salen de tu navegador. Puedes cambiar de opinión cuando quieras en «Configurar cookies», al pie de la página. Más información.