02.1 - Fundamentos de programación en Java

Podemos clasificar los lenguajes de programación atendiendo a distintos criterios

  • Lenguajes de bajo nivel: Están muy cercanos al hardware. Dependen de la arquitectura de la máquina, por lo que no son portables (no se pueden ejecutar en otra máquina distinta a aquella para la que se programaron). A cambio, aprovechan al máximo el rendimiento del hardware.
    • Lenguaje máquina: Único lenguaje que comprende directamente el procesador. Formado exclusivamente por cadenas de bits (0 y 1).
    • Lenguaje ensamblador: Representación simbólica (mnemónicos) del código máquina. Cada arquitectura de procesador tiene su propio ensamblador.

Ejemplo de código máquina:

0010 0000 1001 1001 1000 1110

Ejemplo de lenguaje ensamblador:

MOV R1, DPL
CJNE R1, #78H, T05SEG
RET

  • Lenguajes de alto nivel: Se aproximan al lenguaje natural humano e ignoran las complejidades del hardware. Son portables entre distintas arquitecturas. Ejemplos: Java, Python, C#, JavaScript, PHP.
  • Lenguajes compilados: Necesitan un programa compilador que traduce todo el código fuente a lenguaje máquina antes de su ejecución (ej. C, C++).
  • Lenguajes interpretados: Un programa intérprete lee y traduce el código fuente a lenguaje máquina línea a línea, en tiempo real mientras se ejecuta (ej. Python, JavaScript).

Hay una serie de elementos que están presentes en casi todo lenguaje de programación:

  • Tipos de datos: enteros, reales, cadena de caracteres…
  • Palabras reservadas: conjunto de palabras propias del lenguaje de programación. No pueden utilizarse, por ejemplo, para nombrar variables o constantes.
  • Operadores: Crean instrucciones utilizando cálculos matemáticos (operadores aritméticos), comparaciones (operadores relacionales) u operaciones lógicas (operadores lógicos).
  • Constantes y variables: Posiciones de memoria que almacenan los datos con los que trabaja nuestro programa. Las constantes no pueden variar a lo largo de la ejecución del programa, mientras que las variables sí.
  • Estructuras de control: Secuenciales, condicionales o bucles.
  • Funciones: Bloques de código empaquetados con una cabecera que realizan una tarea específica, lo que permite, entre otras cosas, la reutilización del código.
  • Comentarios: Bloques dentro del código que no se ejecutan. Su función es la de aclarar partes del programa.

Java es un lenguaje de programación de alto nivel, de propósito general y con una sintaxis ampliamente derivada de C/C++. Fue creado originalmente por Sun Microsystems (actualmente propiedad de Oracle) en 1995.

Entre sus pilares fundamentales destacan:

  • Lenguaje híbrido (compilado e interpretado): Combina ambas técnicas mediante un proceso en dos fases:
    1. Compilación: Traduce el código fuente (archivos .java) a un código intermedio universal llamado bytecode (archivos .class).
    2. Ejecución e interpretación: La Máquina Virtual de Java (JVM) interpreta ese bytecode en la máquina de destino. Gracias a este modelo, el programa es totalmente portable: se puede ejecutar en cualquier sistema operativo o arquitectura que disponga de la JVM (*“Escríbelo una vez, ejecútalo en cualquier lugar”*).
  • Orientación a Objetos (POO): Salvo los tipos primitivos, todo el código se estructura en clases y objetos, lo que favorece la modularidad, el mantenimiento y la reutilización.
  • Gran ecosistema y librerías: Incluye una amplia biblioteca estándar (API) que proporciona herramientas listas para usar en casi cualquier tipo de desarrollo (gestión de archivos, estructuras de datos, redes, etc.).

Los archivos de código fuente en Java tienen la extensión .java y su nombre debe coincidir exactamente con la clase principal que contienen.

public class HolaMundo {

        static void main() {
                IO.println("Hola Mundo");
        }
}

Existen dos formas de ejecutar este programa desde la consola:

1. Ejecución directa en un solo paso: Ideal para pruebas rápidas. Compila en memoria y ejecuta el resultado de forma transparente:

java HolaMundo.java

2. Proceso tradicional en dos pasos (entornos de producción):

1. Compilar el código fuente a bytecode (genera el archivo HolaMundo.class):

javac HolaMundo.java

2. Ejecutar el bytecode compilado en la JVM:

java HolaMundo

Al ejecutar con el comando java un archivo ya compilado, no debemos poner la extensión .class, solo el nombre de la clase. Esta ejecución es más rápida porque no requiere recompilar el código.

El compilador de Java genera un archivo .class por cada clase definida en nuestro código fuente, independientemente de si están en el mismo archivo .java o en archivos separados.

public class HolaMundo2 {

    static void main() {
        IO.println("Hola Mundo 2");
    }
}

class HolaMundo3 {

    static void main() {
        IO.println("Hola Mundo 3");
    }
}

Al ejecutar javac HolaMundo2.java, se generarán dos archivos independientes: HolaMundo2.class y HolaMundo3.class.

Regla de visibilidad de archivos: Un archivo .java solo puede contener una clase pública (public) como máximo, y el nombre del archivo debe coincidir exactamente con el nombre de dicha clase.

Vamos a ver la estructura del ejemplo anterior HolaMundo.java:

public class HolaMundo {

        static void main() {
                IO.println("Hola Mundo");
        }
}

  • public class HolaMundo: Define la clase. Todo código en Java debe residir dentro de una clase.
  • Llaves ({ }): Delimitan los bloques de código (clases, métodos, bucles, etc.).
  • static void main(): Es el método de entrada (punto de inicio) de la aplicación. La JVM busca y ejecuta automáticamente este método al arrancar el programa.
  • IO.println(…): Instrucción que imprime el texto indicado por pantalla y añade un salto de línea.

Las instrucciones se ejecutan secuencialmente (de arriba a abajo) y deben terminar obligatoriamente con punto y coma (;).

static void main() {
    IO.println("Primera instrucción");
    IO.println("Segunda instrucción");
}

Aunque Java no obliga a sangrar el código para que compile (a diferencia de Python), la indentación es fundamental para garantizar la legibilidad del proyecto. Se recomienda usar 4 espacios por cada nivel de anidamiento.

Ejemplo con correcta indentación:

public class HolaMundo {
    
    static void main() {
        IO.println("Código fácil de leer");
    }
}

Los comentarios son anotaciones dentro del código fuente que el compilador ignora por completo. Su objetivo es explicar la lógica del programa, añadir notas aclaratorias o generar documentación técnica.

En Java podemos escribir comentarios de tres formas:

  • Comentarios de una sola línea: Empiezan con dos barras (//).
  • Comentarios de bloque (multilínea): Se encierran entre /* y */.
  • Comentarios de documentación (JavaDoc): Se encierran entre /** y */ para generar documentación técnica en HTML.

/**
 * Comentario de documentación (JavaDoc).
 * Muestra información sobre la clase o el autor.
 */
public class HolaMundo {

    static void main() {
        /*
         * Comentario de bloque o multilínea.
         * Útil para detallar algoritmos o bloques
         * de código complejos.
         */
        
        // Comentario de una línea: explica la instrucción siguiente
        IO.println("Hola mundo");
    }
}

No abuses de los comentarios: Como indica Robert C. Martin en su libro Código limpio (Clean Code), el mejor comentario es el que no hace falta escribir. Es preferible escribir código expresivo y autoexplicativo (utilizando buenos nombres de variables y métodos) antes que llenar el programa de comentarios redundantes.
Limpia el código “muerto”: Durante la fase de desarrollo es habitual comentar bloques de código para realizar pruebas. Es importante eliminar todo ese código comentado antes de finalizar y entregar el proyecto, ya que genera ruido y confunde a otros programadores.
  • clase/daw/prog/1eval/java-fundamentos.txt
  • Última modificación: 2026/08/14 12:40
  • por cesguiro