¿Qué es Java?
Java es un lenguaje de programación orientado a objetos, de propósito general y multiplataforma, desarrollado por Sun Microsystems (actualmente Oracle).
Su principal característica es que el código fuente se compila a bytecode, que puede ejecutarse en cualquier sistema operativo que disponga de una Máquina Virtual de Java (JVM).
Conceptos fundamentales
Para comprender Java es imprescindible conocer los siguientes conceptos:
- JDK (Java Development Kit): conjunto de herramientas para desarrollar aplicaciones Java.
- JRE (Java Runtime Environment): entorno necesario para ejecutar aplicaciones Java.
- JVM (Java Virtual Machine): máquina virtual que interpreta el bytecode.
- Bytecode: código intermedio generado por el compilador Java.
- Clase: plantilla que define atributos y métodos.
- Objeto: instancia de una clase.
Funcionamiento de Java
El proceso de ejecución de un programa Java es el siguiente:
Código fuente (.java)
↓
Compilador (javac)
↓
Bytecode (.class)
↓
JVM
↓
Sistema Operativo
La JVM interpreta o compila dinámicamente el bytecode para ejecutarlo sobre el sistema operativo correspondiente.
Características de Java
Java presenta las siguientes características:
- Orientado a objetos.
- Multiplataforma.
- Tipado estático.
- Gestión automática de memoria.
- Robusto y seguro.
- Amplia biblioteca estándar.
- Soporte para programación concurrente.
Programación orientada a objetos (POO)
Java está basado en el paradigma de la Programación Orientada a Objetos (POO).
Sus cuatro pilares son:
- Encapsulación.
- Herencia.
- Polimorfismo.
- Abstracción.
Estos principios permiten desarrollar aplicaciones modulares, reutilizables y fáciles de mantener.
Estructura básica de un programa Java
Todo programa Java se organiza en clases.
Ejemplo simplificado:
public class HolaMundo {
public static void main(String[] args) {
System.out.println("Hola Mundo");
}
}
Los elementos principales son:
- Clase.
- Método
main(). - Instrucciones.
Variables y tipos de datos
Java dispone de tipos primitivos y tipos de referencia.
Tipos primitivos
| Tipo | Tamaño |
|---|---|
| byte | 8 bits |
| short | 16 bits |
| int | 32 bits |
| long | 64 bits |
| float | 32 bits |
| double | 64 bits |
| char | 16 bits |
| boolean | true / false |
Tipos de referencia
- Clases.
- Arrays.
- Interfaces.
- Enumeraciones.
Gestión de memoria
Java administra automáticamente la memoria mediante el Garbage Collector (GC).
Su funcionamiento básico es:
- Se crean objetos en memoria.
- Los objetos dejan de utilizarse.
- El Garbage Collector libera automáticamente la memoria ocupada.
Objeto creado
↓
Uso
↓
Sin referencias
↓
Garbage Collector
↓
Memoria liberada
Excepciones
Las excepciones representan errores que pueden producirse durante la ejecución del programa.
Existen dos grandes categorías:
| Tipo | Descripción |
|---|---|
| Checked | Deben gestionarse obligatoriamente. |
| Unchecked | Derivan de RuntimeException y no es obligatorio capturarlas. |
Java permite controlar las excepciones mediante:
- try
- catch
- finally
- throw
- throws
Colecciones
El Java Collections Framework proporciona estructuras de datos reutilizables.
Las más importantes son:
| Colección | Característica |
|---|---|
| List | Mantiene el orden y admite duplicados. |
| Set | No permite elementos duplicados. |
| Queue | Gestiona elementos en cola. |
| Map | Almacena pares clave-valor. |
Comparación Java vs C++
| Java | C++ |
|---|---|
| Ejecuta sobre JVM | Compila a código nativo |
| Gestión automática de memoria | Gestión manual de memoria |
| Multiplataforma | Dependiente de la compilación |
| Sin herencia múltiple de clases | Permite herencia múltiple |
| Mayor seguridad | Mayor control del hardware |
Caso práctico
Situación
Una empresa necesita desarrollar una aplicación que funcione tanto en Windows como en Linux sin modificar el código fuente.
Solución
Java es una buena opción porque:
- El código se compila una sola vez.
- El bytecode puede ejecutarse en cualquier sistema con JVM.
- No es necesario recompilar para cada plataforma.
Ventajas e inconvenientes
Ventajas
- Multiplataforma.
- Orientación a objetos.
- Gestión automática de memoria.
- Gran ecosistema de bibliotecas.
- Elevada seguridad.
- Amplia utilización en aplicaciones empresariales.
Inconvenientes
- Mayor consumo de memoria que otros lenguajes.
- Rendimiento inferior al código nativo en algunos escenarios.
- Arranque más lento debido a la JVM.
- Sintaxis relativamente extensa.
Errores habituales
- Confundir JDK, JRE y JVM.
- Pensar que Java compila directamente a código máquina.
- Creer que Java libera memoria manualmente.
- Confundir una clase con un objeto.
- No diferenciar tipos primitivos y tipos de referencia.
- Pensar que List, Set y Map son equivalentes.
Cómo evitarlos
- Recordar el flujo Código fuente → Bytecode → JVM.
- Diferenciar claramente las funciones de JDK, JRE y JVM.
- Comprender el funcionamiento del Garbage Collector.
- Practicar los conceptos de Programación Orientada a Objetos.
- Memorizar las principales colecciones del lenguaje.
Relaciones con otros temas
Java está directamente relacionado con:
- Programación Orientada a Objetos.
- JVM.
- JDK.
- JRE.
- Gestión de memoria.
- Excepciones.
- Colecciones.
- Concurrencia.
- Bases de datos (JDBC).
- Desarrollo web.
Conceptos clave para recordar
[!NOTE]
- Java es un lenguaje de programación orientado a objetos y multiplataforma.
- El código fuente se compila a bytecode, que ejecuta la JVM.
- El JDK contiene las herramientas de desarrollo; el JRE proporciona el entorno de ejecución; la JVM ejecuta el bytecode.
- Java implementa los principios de la Programación Orientada a Objetos: encapsulación, herencia, polimorfismo y abstracción.
- El método main() es el punto de entrada de una aplicación.
- La memoria se gestiona automáticamente mediante el Garbage Collector.
- Las colecciones más importantes son List, Set, Queue y Map.
- Java es uno de los lenguajes más utilizados para aplicaciones empresariales, desarrollo web, aplicaciones Android (históricamente) y sistemas distribuidos.