Volver a Labs
Principiante

Fundamentos de Programación en Java

3–4 horas Actualizado Junio 2026
Java Fundamentos Principiantes

Introducción

Programar es darle instrucciones a una computadora de forma precisa y ordenada. La computadora hace exactamente lo que le dices — ni más, ni menos — así que aprender a ser claro y específico es la habilidad más importante que vas a desarrollar.

Java es uno de los lenguajes de programación más usados del mundo. Está detrás de aplicaciones bancarias, apps de Android y sistemas empresariales. Es un buen primer lenguaje porque te enseña a pensar de forma ordenada y sus reglas son estrictas (lo que evita malos hábitos).

¿Qué vas a aprender en este lab?

  • Escribir y entender tu primer programa en Java
  • Usar variables para almacenar información
  • Tomar decisiones con condicionales
  • Repetir acciones con bucles
  • Organizar código en métodos

Requisitos previos: ninguno. Este lab está pensado para quien empieza desde cero.


0. Tu primer programa: Hola Mundo

Todo programa en Java vive dentro de una clase. La ejecución siempre empieza por el método main.

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

Salida:

¡Hola, mundo!

¿Qué significa cada parte?

Parte Qué hace
public class HolaMundo Define una clase llamada HolaMundo. El nombre del archivo debe coincidir: HolaMundo.java
public static void main El punto de entrada del programa. Java lo busca para saber por dónde empezar
String[] args Lista de argumentos que se pueden pasar al programa (por ahora, ignórala)
System.out.println(...) Imprime texto en la consola y salta a la siguiente línea

Ejercicio 0

Crea un archivo Presentacion.java y escribe un programa que imprima tu nombre, tu edad y lo que te gustaría aprender a programar. Usa tres líneas de System.out.println.


1. Variables y Tipos de Datos

Una variable es un espacio con nombre donde guardas un valor. Piénsalo como una caja con una etiqueta.

En Java debes declarar el tipo de dato antes de usarla. El tipo le dice a Java cuánto espacio reservar en memoria y qué operaciones están permitidas.

Tipos primitivos

int     edad    = 25;     // número entero
double  precio  = 19.99;  // número decimal
boolean activo  = true;   // verdadero o falso
char    inicial = 'J';    // un solo carácter (comillas simples)

String — texto

String no es un tipo primitivo, pero se usa constantísimo:

String nombre = "Julian";
String saludo = "Hola, " + nombre; // concatenación con +
System.out.println(saludo);        // Hola, Julian

Reglas para nombres de variables

  • Empiezan con letra minúscula: edad, nombreUsuario
  • Si tienen varias palabras, usa camelCase: precioFinal, estaActivo
  • No pueden empezar con números ni tener espacios
  • No uses palabras reservadas de Java (class, int, public, etc.)

Ver el valor de una variable

int temperatura = 38;
System.out.println("La temperatura es: " + temperatura + "°C");
// La temperatura es: 38°C

Ejercicio 1

Declara variables para almacenar: el título de tu película favorita, su año de estreno, su calificación (con decimales) y si la recomendarías (true/false). Imprímelas todas con un mensaje descriptivo.


2. Operadores

Los operadores te permiten realizar cálculos y comparaciones.

Aritméticos

int a = 10, b = 3;

System.out.println(a + b);  // 13 — suma
System.out.println(a - b);  // 7  — resta
System.out.println(a * b);  // 30 — multiplicación
System.out.println(a / b);  // 3  — división entera (descarta el resto)
System.out.println(a % b);  // 1  — módulo (resto de la división)

Ojo con la división entera: 10 / 3 en Java da 3, no 3.33. Para obtener decimales, usa double: 10.0 / 3 da 3.3333...

Relacionales (devuelven true o false)

int x = 5, y = 8;
System.out.println(x == y);  // false — igual
System.out.println(x != y);  // true  — distinto
System.out.println(x <  y);  // true  — menor que
System.out.println(x >= y);  // false — mayor o igual

Lógicos

Combinan condiciones:

int edad = 20;
boolean tieneDNI = true;

// && (AND): ambas condiciones deben ser true
System.out.println(edad >= 18 && tieneDNI);  // true

// || (OR): al menos una condición debe ser true
System.out.println(edad < 18 || tieneDNI);   // true

// ! (NOT): invierte el resultado
System.out.println(!tieneDNI);               // false

Asignación compuesta

int contador = 0;
contador += 5;  // equivale a: contador = contador + 5
contador++;     // equivale a: contador = contador + 1
contador--;     // equivale a: contador = contador - 1

Ejercicio 2

Escribe un programa que calcule el precio final de un producto aplicando un 21% de IVA y un 10% de descuento. Imprime el precio original, el descuento aplicado, el IVA y el precio final. Usa double para todos los valores.


3. Condicionales

Los condicionales permiten que tu programa tome decisiones según el valor de una condición.

if / else if / else

int nota = 75;

if (nota >= 90) {
    System.out.println("Excelente");
} else if (nota >= 70) {
    System.out.println("Aprobado");
} else if (nota >= 50) {
    System.out.println("Recuperación");
} else {
    System.out.println("Reprobado");
}
// Salida: Aprobado

Java evalúa las condiciones de arriba a abajo y ejecuta el primer bloque que se cumpla. Los demás se saltan.

Condicional anidado

int edad = 20;
boolean tieneLicencia = true;

if (edad >= 18) {
    if (tieneLicencia) {
        System.out.println("Puede conducir.");
    } else {
        System.out.println("Tiene la edad, pero necesita licencia.");
    }
} else {
    System.out.println("No tiene la edad suficiente.");
}

switch

Útil cuando una sola variable puede tomar varios valores específicos:

int diaSemana = 3;

switch (diaSemana) {
    case 1: System.out.println("Lunes");     break;
    case 2: System.out.println("Martes");    break;
    case 3: System.out.println("Miércoles"); break;
    case 4: System.out.println("Jueves");    break;
    case 5: System.out.println("Viernes");   break;
    default: System.out.println("Fin de semana");
}
// Salida: Miércoles

No olvides el break en cada case. Sin él, Java ejecuta también todos los casos siguientes (comportamiento llamado fall-through).

Ejercicio 3

Escribe un programa que reciba la temperatura del día (variable int temperatura) y muestre un mensaje según el rango:

  • Menor de 0°C → "Bajo cero, cuidado con el hielo"
  • 0–15°C → "Frío, lleva abrigo"
  • 16–25°C → "Agradable"
  • 26–35°C → "Caluroso"
  • Mayor de 35°C → "Calor extremo"

4. Bucles

Los bucles permiten repetir un bloque de código múltiples veces.

for — cuando sabes cuántas veces repetir

for (int i = 1; i <= 5; i++) {
    System.out.println("Iteración " + i);
}
// Iteración 1
// Iteración 2
// ...
// Iteración 5

El for tiene tres partes separadas por ;:

  1. Inicialización: int i = 1 — se ejecuta una sola vez al inicio
  2. Condición: i <= 5 — se verifica antes de cada iteración
  3. Actualización: i++ — se ejecuta después de cada iteración

while — cuando no sabes cuántas veces repetir

int numero = 1;
while (numero <= 100) {
    numero *= 2;  // duplica el número en cada vuelta
}
System.out.println("Primer número mayor a 100: " + numero);
// Primer número mayor a 100: 128

do-while — ejecuta al menos una vez

int intentos = 0;
do {
    System.out.println("Intento " + (intentos + 1));
    intentos++;
} while (intentos < 3);
// Intento 1
// Intento 2
// Intento 3

break y continue

// break: sale del bucle inmediatamente
for (int i = 0; i < 10; i++) {
    if (i == 5) break;
    System.out.println(i); // imprime 0, 1, 2, 3, 4
}

// continue: salta a la siguiente iteración
for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) continue; // salta los pares
    System.out.println(i); // imprime 1, 3, 5, 7, 9
}

Bucles anidados

// Tabla de multiplicar del 2 al 4
for (int tabla = 2; tabla <= 4; tabla++) {
    System.out.println("--- Tabla del " + tabla + " ---");
    for (int num = 1; num <= 5; num++) {
        System.out.println(tabla + " x " + num + " = " + (tabla * num));
    }
}

Ejercicio 4

Escribe un programa que imprima todos los números del 1 al 50 que sean divisibles por 3 pero NO por 5. Pista: usa el operador % para verificar divisibilidad.


5. Métodos

Un método es un bloque de código con nombre que realiza una tarea específica. Permiten reutilizar código sin repetirlo.

Declarar un método

public class Calculadora {

    // Método que recibe dos números y devuelve su suma
    public static int sumar(int a, int b) {
        return a + b;
    }

    // Método que no devuelve nada (void)
    public static void imprimirBienvenida(String nombre) {
        System.out.println("Bienvenido, " + nombre + "!");
    }

    public static void main(String[] args) {
        int resultado = sumar(10, 5);
        System.out.println("10 + 5 = " + resultado); // 10 + 5 = 15

        imprimirBienvenida("Julian"); // Bienvenido, Julian!
    }
}

Partes de un método:

Parte Ejemplo Descripción
Modificadores public static Visibilidad y comportamiento
Tipo de retorno int Tipo del valor que devuelve (void si no devuelve nada)
Nombre sumar En camelCase, verbo que describe lo que hace
Parámetros (int a, int b) Datos de entrada que necesita
Cuerpo { return a + b; } Las instrucciones del método

Múltiples parámetros y retorno

public static double calcularPromedio(double n1, double n2, double n3) {
    double suma = n1 + n2 + n3;
    return suma / 3;
}

// En main:
double promedio = calcularPromedio(8.5, 7.0, 9.5);
System.out.printf("Promedio: %.2f%n", promedio); // Promedio: 8.33

System.out.printf permite formatear la salida. %.2f imprime un decimal con 2 cifras.

Ejercicio 5

Crea una clase Utilidades con estos métodos estáticos:

  • esPar(int n) → devuelve true si n es par
  • esPrimo(int n) → devuelve true si n es primo
  • factorial(int n) → devuelve el factorial de n (usa un bucle for)

En main, prueba cada método con varios valores e imprime los resultados.


6. Errores Comunes

Error 1 — Usar una variable sin inicializarla

// Incorrecto
int numero;
System.out.println(numero); // Error de compilación: variable might not have been initialized

// Correcto
int numero = 0;
System.out.println(numero); // 0

Error 2 — División entera cuando necesitas decimales

// Incorrecto
int total = 10;
int personas = 3;
double porPersona = total / personas; // 3.0 (no 3.333...)

// Correcto — fuerza la división decimal
double porPersona = (double) total / personas; // 3.3333...

Error 3 — Comparar Strings con ==

String nombre = "Julian";

// Incorrecto: == compara referencias, no contenido
if (nombre == "Julian") { }

// Correcto: .equals() compara el contenido del texto
if (nombre.equals("Julian")) {
    System.out.println("¡Hola, Julian!");
}

Error 4 — Bucle infinito por olvidar la actualización

// Incorrecto: i nunca cambia, el bucle no termina
int i = 0;
while (i < 10) {
    System.out.println(i);
    // falta: i++;
}

// Correcto
int i = 0;
while (i < 10) {
    System.out.println(i);
    i++;
}

Error 5 — Confundir = con ==

int x = 5;

// Incorrecto: asigna 10 a x en lugar de comparar
// if (x = 10) { }  // Error de compilación en Java

// Correcto
if (x == 10) {
    System.out.println("x es 10");
}

Resumen

Concepto Para qué sirve Ejemplo
Variables Guardar datos int edad = 25;
Tipos de datos Definir qué tipo de valor contiene la variable int, double, String, boolean
Operadores Calcular y comparar +, -, ==, &&
Condicionales Tomar decisiones if / else if / else
Bucles Repetir acciones for, while
Métodos Reutilizar bloques de código public static int sumar(...)

Próximos pasos

Con estos fundamentos ya estás listo para el siguiente nivel:

  • Programación Orientada a Objetos: clases, objetos, herencia y polimorfismo
  • Arrays: guardar múltiples valores del mismo tipo en una sola variable
  • Colecciones: ArrayList y HashMap para trabajar con grupos de datos de forma flexible
  • Manejo de errores: try-catch para que tu programa no falle ante lo inesperado