Fundamentos de Programación en Java

Sintaxis básica

Ahora que hemos escrito nuestro primer programa en Java, es momento de entender la sintaxis básica del lenguaje. Esto incluye la estructura general de un programa, declaraciones de variables, tipos de datos, operadores, y cómo hacer comentarios en el código. Vamos a verlo con ejemplos claros.

Código del Programa

				
					// Archivo: SintaxisBasica.java

// Importación de bibliotecas necesarias (si las hubiera)
import java.util.Scanner;

// Declaración de la clase
public class SintaxisBasica {
    
    // Método principal: punto de entrada del programa
    public static void main(String[] args) {
        
        // Declaración de variables y tipos de datos
        int numeroEntero = 10;             // Variable de tipo entero
        double numeroDecimal = 5.5;        // Variable de tipo decimal
        char caracter = 'A';               // Variable de tipo carácter
        boolean esVerdadero = true;        // Variable de tipo booleano
        String texto = "Hola Java";        // Variable de tipo cadena de texto

        // Impresión de valores en la consola
        System.out.println("Número Entero: " + numeroEntero);
        System.out.println("Número Decimal: " + numeroDecimal);
        System.out.println("Carácter: " + caracter);
        System.out.println("Booleano: " + esVerdadero);
        System.out.println("Texto: " + texto);

        // Operadores aritméticos
        int suma = numeroEntero + 5;
        int resta = numeroEntero - 2;
        int multiplicacion = numeroEntero * 3;
        double division = numeroDecimal / 2;
        
        // Impresión de resultados de operaciones aritméticas
        System.out.println("Suma: " + suma);
        System.out.println("Resta: " + resta);
        System.out.println("Multiplicación: " + multiplicacion);
        System.out.println("División: " + division);
        
        // Comentarios en una línea
        // Este es un comentario de una sola línea

        /* 
         * Comentarios en varias líneas
         * Este es un comentario que abarca varias líneas
         */
        
        // Entrada de datos del usuario
        Scanner scanner = new Scanner(System.in);
        System.out.print("Introduce tu nombre: ");
        String nombreUsuario = scanner.nextLine();
        System.out.println("Hola, " + nombreUsuario + "!");
        
        // Cerrando el scanner
        scanner.close();
    }
}

				
			

Explicación del Código

  1. Importación de Bibliotecas:

    • Se importa la clase Scanner de la biblioteca java.util, que se usa para la entrada de datos del usuario.
  2. Declaración de la Clase:

    • Se declara una clase pública llamada SintaxisBasica. Todo el código en Java debe estar dentro de una clase.
  3. Método Principal:

    • Este es el punto de entrada del programa. Aquí es donde comienza la ejecución.
  4. Declaración de Variables y Tipos de Datos:

    • Se declaran variables de diferentes tipos: entero, decimal, carácter, booleano y cadena de texto.
  5. Impresión en la Consola:

    • Usa System.out.println para imprimir valores en la consola.
  6. Operadores Aritméticos:

    • Se realizan operaciones aritméticas básicas como suma, resta, multiplicación y división.
  7. Comentarios en el Código:

    • Los comentarios de una sola línea comienzan con // y los comentarios de varias líneas están delimitados por /* y */.
  8. Entrada de Datos del Usuario:

    • Usa la clase Scanner para leer la entrada del usuario desde la consola.
  9. Cierre del Scanner:

    • Se cierra el objeto Scanner para liberar los recursos asociados.

Tipos de datos y variables

En Java, las variables son contenedores que almacenan datos que pueden ser utilizados y manipulados a lo largo del programa. Los tipos de datos determinan qué tipo de datos pueden ser almacenados en estas variables. Java es un lenguaje fuertemente tipado, lo que significa que cada variable debe declararse con un tipo de dato específico.

Código del Programa

				
					// Archivo: TiposDeDatosYVariables.java

public class TiposDeDatosYVariables {
    
    public static void main(String[] args) {
        
        // Tipos de datos primitivos
        byte numeroByte = 127;            // Número entero de 8 bits
        short numeroShort = 32767;        // Número entero de 16 bits
        int numeroInt = 2147483647;       // Número entero de 32 bits
        long numeroLong = 9223372036854775807L; // Número entero de 64 bits
        
        float numeroFloat = 3.14f;        // Número de punto flotante de 32 bits
        double numeroDouble = 3.141592653589793; // Número de punto flotante de 64 bits
        
        char caracter = 'A';              // Carácter unicode de 16 bits
        boolean esVerdadero = true;       // Valor booleano (true o false)
        
        // Tipos de datos no primitivos
        String texto = "Hola, Java";      // Cadena de texto (clase String)
        int[] numeros = {1, 2, 3, 4, 5};  // Arreglo de enteros
        
        // Impresión de variables en la consola
        System.out.println("Número Byte: " + numeroByte);
        System.out.println("Número Short: " + numeroShort);
        System.out.println("Número Int: " + numeroInt);
        System.out.println("Número Long: " + numeroLong);
        System.out.println("Número Float: " + numeroFloat);
        System.out.println("Número Double: " + numeroDouble);
        System.out.println("Carácter: " + caracter);
        System.out.println("Booleano: " + esVerdadero);
        System.out.println("Texto: " + texto);
        
        // Impresión de los elementos del arreglo
        for (int numero : numeros) {
            System.out.print(numero + " ");
        }
    }
}

				
			

Explicación del Código

  1. Tipos de Datos Primitivos:

    • byte: Almacena enteros de 8 bits. Útil para ahorrar memoria en grandes cantidades de datos.
    • short: Almacena enteros de 16 bits.
    • int: Almacena enteros de 32 bits. Es el tipo de dato entero más común.
    • long: Almacena enteros de 64 bits. Se usa cuando se necesita un rango mayor de valores enteros.
    • float: Almacena números de punto flotante de 32 bits. Debe terminar en ‘f’.
    • double: Almacena números de punto flotante de 64 bits. Es el tipo de dato de punto flotante más común.
    • char: Almacena un solo carácter Unicode de 16 bits.
    • boolean: Almacena valores booleanos (true o false).
  2. Tipos de Datos No Primitivos:

    • String: Almacena cadenas de texto. Es una clase en Java y no un tipo de dato primitivo.
    • Arreglos: Almacenan múltiples valores del mismo tipo en una sola variable.
  3. Declaración y Inicialización de Variables:

    • Las variables se declaran especificando el tipo de dato seguido por el nombre de la variable y, opcionalmente, un valor inicial.
  4. Impresión de Variables en la Consola:

    • Se usa System.out.println para imprimir valores en la consola, lo que ayuda a visualizar el contenido de las variables.
  5. Uso de Arreglos:

    • Los arreglos se utilizan para almacenar múltiples valores del mismo tipo. En el ejemplo, se declara e inicializa un arreglo de enteros y se imprime cada elemento usando un bucle for-each.

Operadores (aritméticos, lógicos, relacionales, de asignación)

Los operadores en Java permiten realizar diversas operaciones con los valores almacenados en las variables. Existen diferentes tipos de operadores, cada uno con su propósito específico. Vamos a explorar los operadores aritméticos, lógicos, relacionales y de asignación.

Código del Programa

				
					// Archivo: Operadores.java

public class Operadores {
    
    public static void main(String[] args) {
        
        // Operadores aritméticos
        int a = 10;
        int b = 5;
        
        int suma = a + b;             // Suma
        int resta = a - b;            // Resta
        int multiplicacion = a * b;   // Multiplicación
        int division = a / b;         // División
        int modulo = a % b;           // Módulo (resto de la división)
        
        // Operadores de asignación
        int c = 10;
        c += 5;   // Equivale a c = c + 5
        c -= 3;   // Equivale a c = c - 3
        c *= 2;   // Equivale a c = c * 2
        c /= 2;   // Equivale a c = c / 2
        c %= 3;   // Equivale a c = c % 3
        
        // Operadores relacionales
        boolean igual = (a == b);     // Igual a
        boolean diferente = (a != b); // Diferente a
        boolean mayor = (a > b);      // Mayor que
        boolean menor = (a < b);      // Menor que
        boolean mayorIgual = (a >= b);// Mayor o igual que
        boolean menorIgual = (a <= b);// Menor o igual que
        
        // Operadores lógicos
        boolean verdadero = true;
        boolean falso = false;
        
        boolean and = verdadero && falso; // AND lógico
        boolean or = verdadero || falso;  // OR lógico
        boolean not = !verdadero;         // NOT lógico
        
        // Impresión de resultados
        System.out.println("Operadores Aritméticos:");
        System.out.println("Suma: " + suma);
        System.out.println("Resta: " + resta);
        System.out.println("Multiplicación: " + multiplicacion);
        System.out.println("División: " + division);
        System.out.println("Módulo: " + modulo);
        
        System.out.println("\nOperadores de Asignación:");
        System.out.println("c += 5: " + c);
        
        System.out.println("\nOperadores Relacionales:");
        System.out.println("a == b: " + igual);
        System.out.println("a != b: " + diferente);
        System.out.println("a > b: " + mayor);
        System.out.println("a < b: " + menor);
        System.out.println("a >= b: " + mayorIgual);
        System.out.println("a <= b: " + menorIgual);
        
        System.out.println("\nOperadores Lógicos:");
        System.out.println("verdadero && falso: " + and);
        System.out.println("verdadero || falso: " + or);
        System.out.println("!verdadero: " + not);
    }
}

				
			

Explicación del Código

  1. Operadores Aritméticos:

    • Suma (+): Añade dos operandos.
    • Resta (-): Resta el segundo operando del primero.
    • Multiplicación (*): Multiplica dos operandos.
    • División (/): Divide el primer operando por el segundo.
    • Módulo (%): Devuelve el resto de la división entre dos operandos.
  2. Operadores de Asignación:

    • Asignación (=): Asigna un valor a una variable.
    • Asignación con suma (+=): Suma el operando derecho al izquierdo y asigna el resultado a la variable.
    • Asignación con resta (-=): Resta el operando derecho del izquierdo y asigna el resultado a la variable.
    • Asignación con multiplicación (*=): Multiplica el operando derecho con el izquierdo y asigna el resultado a la variable.
    • Asignación con división (/=): Divide el operando izquierdo por el derecho y asigna el resultado a la variable.
    • Asignación con módulo (%=): Calcula el módulo del operando izquierdo por el derecho y asigna el resultado a la variable.
  3. Operadores Relacionales:

    • Igual a (==): Comprueba si dos operandos son iguales.
    • Diferente a (!=): Comprueba si dos operandos son diferentes.
    • Mayor que (>): Comprueba si el operando izquierdo es mayor que el derecho.
    • Menor que (<): Comprueba si el operando izquierdo es menor que el derecho.
    • Mayor o igual que (>=): Comprueba si el operando izquierdo es mayor o igual que el derecho.
    • Menor o igual que (<=): Comprueba si el operando izquierdo es menor o igual que el derecho.
  4. Operadores Lógicos:

    • AND (&&): Devuelve verdadero si ambos operandos son verdaderos.
    • OR (||): Devuelve verdadero si al menos uno de los operandos es verdadero.
    • NOT (!): Invierte el valor booleano del operando.

Declaraciones if, else if y else

Las declaraciones condicionales en Java se utilizan para ejecutar diferentes bloques de código basados en ciertas condiciones. Las tres principales declaraciones condicionales son if, else if y else.

Código del Programa

				
					// Archivo: DeclaracionesCondicionales.java

public class DeclaracionesCondicionales {
    
    public static void main(String[] args) {
        
        int numero = 10;

        // Declaración if
        if (numero > 0) {
            System.out.println("El número es positivo.");
        }

        // Declaración if-else
        if (numero < 0) {
            System.out.println("El número es negativo.");
        } else {
            System.out.println("El número no es negativo.");
        }

        // Declaración if-else if-else
        if (numero > 0) {
            System.out.println("El número es positivo.");
        } else if (numero < 0) {
            System.out.println("El número es negativo.");
        } else {
            System.out.println("El número es cero.");
        }

        // Anidación de declaraciones if
        if (numero > 0) {
            System.out.println("El número es positivo.");
            if (numero % 2 == 0) {
                System.out.println("El número es par.");
            } else {
                System.out.println("El número es impar.");
            }
        }
    }
}

				
			

Explicación del Código

  1. Declaración if:

    • Se utiliza para evaluar una condición. Si la condición es verdadera, el bloque de código dentro del if se ejecuta. En el ejemplo, si numero es mayor que 0, se imprime «El número es positivo.»
  2. Declaración if-else:

    • Se utiliza cuando se necesitan dos caminos posibles: uno si la condición es verdadera y otro si es falsa. En el ejemplo, si numero es menor que 0, se imprime «El número es negativo.» Si no, se imprime «El número no es negativo.»
  3. Declaración if-else if-else:

    • Se utiliza cuando hay múltiples condiciones que necesitan ser evaluadas en secuencia. Si la primera condición es falsa, se evalúa la siguiente else if, y así sucesivamente. Si ninguna de las condiciones es verdadera, se ejecuta el bloque else. En el ejemplo, se verifica si numero es mayor que 0, menor que 0 o igual a 0, imprimiendo el resultado correspondiente.
  4. Anidación de declaraciones if:

    • Es posible anidar declaraciones if dentro de otras declaraciones if. En el ejemplo, se evalúa primero si numero es mayor que 0. Si es así, se verifica si numero es par o impar, imprimiendo el resultado correspondiente.

Expresiones condicionales

Las expresiones condicionales en Java permiten evaluar condiciones y tomar decisiones basadas en esas evaluaciones. La expresión condicional más común es el operador ternario (? :), que proporciona una manera concisa de realizar una operación condicional simple.

Código del Programa

				
					// Archivo: ExpresionesCondicionales.java

public class ExpresionesCondicionales {
    
    public static void main(String[] args) {
        
        int numero = 10;
        
        // Operador ternario (expresión condicional)
        String resultado = (numero > 0) ? "El número es positivo." : "El número no es positivo.";
        
        System.out.println(resultado);

        // Ejemplo con una condición más compleja
        int edad = 18;
        String mensaje = (edad >= 18) ? "Eres un adulto." : "No eres un adulto.";
        
        System.out.println(mensaje);

        // Uso del operador ternario anidado
        int hora = 15;
        String saludo = (hora < 12) ? "Buenos días" : (hora < 18) ? "Buenas tardes" : "Buenas noches";
        
        System.out.println(saludo);
    }
}

				
			

Explicación del Código

  1. Operador ternario (expresión condicional):

    • El operador ternario es una forma abreviada de la declaración if-else que se utiliza para asignar un valor basado en una condición. La sintaxis es condicion ? valorSiVerdadero : valorSiFalso.
    • En el ejemplo, la variable resultado se asigna con «El número es positivo.» si numero es mayor que 0. De lo contrario, se asigna «El número no es positivo.»
    • La expresión (numero > 0) ? "El número es positivo." : "El número no es positivo." evalúa si numero es mayor que 0 y, según el resultado, asigna uno de los dos valores posibles a resultado.
  2. Condición más compleja:

    • El operador ternario también se puede utilizar con condiciones más complejas. En el ejemplo, la variable mensaje se asigna con «Eres un adulto.» si edad es mayor o igual a 18. De lo contrario, se asigna «No eres un adulto.»
  3. Operador ternario anidado:

    • Es posible anidar operadores ternarios para evaluar múltiples condiciones. En el ejemplo, la variable saludo se asigna con un saludo diferente según la hora del día. Si hora es menor que 12, se asigna «Buenos días». Si hora es menor que 18, se asigna «Buenas tardes». De lo contrario, se asigna «Buenas noches».

Bucles (for, while, do-while)

Los bucles en Java permiten ejecutar un bloque de código repetidamente mientras se cumpla una condición o hasta que se alcance un cierto criterio de terminación. Los bucles más comunes son for, while y do-while.

Código del Programa

				
					// Archivo: Bucles.java

public class Bucles {
    
    public static void main(String[] args) {
        
        // Bucle for
        System.out.println("Bucle for:");
        for (int i = 1; i <= 5; i++) {
            System.out.println("Iteración " + i);
        }

        // Bucle while
        System.out.println("\nBucle while:");
        int j = 1;
        while (j <= 5) {
            System.out.println("Iteración " + j);
            j++;
        }

        // Bucle do-while
        System.out.println("\nBucle do-while:");
        int k = 1;
        do {
            System.out.println("Iteración " + k);
            k++;
        } while (k <= 5);
    }
}

				
			

Explicación del Código

  1. Bucle for:

    • El bucle for se utiliza cuando se conoce el número exacto de iteraciones. Se compone de tres partes: la inicialización, la condición de continuación y la expresión de actualización.
    • En el ejemplo, el bucle for imprime «Iteración» seguido del número de iteración del 1 al 5.
  2. Bucle while:

    • El bucle while se utiliza cuando no se conoce el número exacto de iteraciones de antemano. Se ejecuta siempre que la condición especificada sea verdadera.
    • En el ejemplo, el bucle while imprime «Iteración» seguido del número de iteración del 1 al 5.
  3. Bucle do-while:

    • El bucle do-while es similar al bucle while, pero garantiza que el bloque de código se ejecute al menos una vez, ya que la condición se evalúa después de la ejecución del bloque.
    • En el ejemplo, el bucle do-while imprime «Iteración» seguido del número de iteración del 1 al 5.