Curso de programación con Java

Java es el lenguaje de programación popular para aplicaciones robustas y escalables. Aprende a desarrollar software profesional con Java.

Aprende Java GRATIS y certifícate

Java es un lenguaje de programación orientado a objetos y una plataforma informática que fue desarrollado por Sun Microsystems en 1995. Es ampliamente utilizado para crear aplicaciones multiplataforma, desde aplicaciones móviles hasta sistemas empresariales robustos. Su filosofía "escribe una vez, ejecuta en cualquier lugar" permite que el código Java compilado se ejecute en cualquier dispositivo que tenga instalada la Máquina Virtual de Java (JVM).

¿Qué es Java?

Java es tanto un lenguaje de programación de alto nivel como una plataforma de software. Como lenguaje, es conocido por su sintaxis similar a C++, pero con menos complejidades y una gestión automática de memoria mediante recolección de basura. Como plataforma, proporciona un entorno para desarrollar y ejecutar programas Java, incluyendo bibliotecas estándar y herramientas de desarrollo.

Características principales de Java

  • Orientado a objetos: Facilita el modelado de sistemas complejos mediante clases y objetos.
  • Multiplataforma: El código Java se compila en bytecode, que puede ejecutarse en cualquier JVM independientemente del sistema operativo.
  • Gestión automática de memoria: El recolector de basura se encarga de liberar memoria de objetos que ya no se utilizan.
  • Seguro y robusto: Incluye características que evitan errores comunes y proporciona un entorno de ejecución seguro.
  • Multihilo: Soporta programación concurrente para mejorar el rendimiento de las aplicaciones.

Instalación y configuración

Descarga del JDK

Para desarrollar en Java, es necesario instalar el Java Development Kit (JDK). Se puede descargar desde el sitio oficial de Oracle o utilizar distribuciones de código abierto como OpenJDK.

Configuración del entorno

Después de instalar el JDK, es recomendable configurar las variables de entorno:

  • En Windows:

    • Añadir JAVA_HOME apuntando al directorio de instalación del JDK.
    • Agregar %JAVA_HOME%\bin al PATH.
  • En Linux y macOS:

    • Editar el archivo .bashrc o .bash_profile y añadir:
      export JAVA_HOME=/ruta/al/jdk
      export PATH=$JAVA_HOME/bin:$PATH
      

Sintaxis básica

Estructura de un programa Java

Un programa Java básico consiste en una clase pública con un método main:

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

Para compilar y ejecutar:

javac HolaMundo.java
java HolaMundo

Variables y tipos de datos

Java es un lenguaje de tipado estático, por lo que es necesario declarar el tipo de las variables.

Tipos primitivos

  • Enteros: byte, short, int, long
  • Punto flotante: float, double
  • Carácter: char
  • Booleano: boolean

Ejemplo:

int edad = 30;
double salario = 2500.50;
char inicial = 'A';
boolean esActivo = true;

Tipos no primitivos

  • Clases: String, Integer, Double, etc.
  • Arreglos: Estructuras que almacenan múltiples valores del mismo tipo.

Ejemplo:

String nombre = "Ana";
int[] numeros = {1, 2, 3, 4, 5};

Operadores

Aritméticos

  • Suma: +
  • Resta: -
  • Multiplicación: *
  • División: /
  • Módulo: %

Ejemplo:

int resultado = 10 + 5;

Relacionales

  • Mayor que: >
  • Menor que: <
  • Igual a: ==
  • Diferente de: !=
  • Mayor o igual que: >=
  • Menor o igual que: <=

Lógicos

  • AND: &&
  • OR: ||
  • NOT: !

Estructuras de control

Condicionales

If-else

if (edad >= 18) {
    System.out.println("Eres mayor de edad.");
} else {
    System.out.println("Eres menor de edad.");
}

Switch

switch (dia) {
    case 1:
        System.out.println("Lunes");
        break;
    case 2:
        System.out.println("Martes");
        break;
    // ...
    default:
        System.out.println("Día no válido");
}

Bucles

For

for (int i = 0; i < 10; i++) {
    System.out.println("Iteración: " + i);
}

While

int i = 0;
while (i < 10) {
    System.out.println("Iteración: " + i);
    i++;
}

Do-while

int i = 0;
do {
    System.out.println("Iteración: " + i);
    i++;
} while (i < 10);

Programación orientada a objetos en Java

Clases y objetos

Una clase es una plantilla para crear objetos. Los objetos son instancias de clases.

Definición de una clase

public class Persona {
    String nombre;
    int edad;

    public void saludar() {
        System.out.println("Hola, me llamo " + nombre);
    }
}

Creación de un objeto

Persona persona = new Persona();
persona.nombre = "Luis";
persona.edad = 25;
persona.saludar();

Encapsulación

Consiste en ocultar los detalles internos de una clase y exponer solo lo necesario.

public class CuentaBancaria {
    private double saldo;

    public void depositar(double monto) {
        saldo += monto;
    }

    public double obtenerSaldo() {
        return saldo;
    }
}

Herencia

Permite que una clase herede atributos y métodos de otra.

public class Animal {
    public void comer() {
        System.out.println("El animal está comiendo");
    }
}

public class Perro extends Animal {
    public void ladrar() {
        System.out.println("El perro está ladrando");
    }
}

Polimorfismo

Una misma acción puede tener diferentes comportamientos según el objeto.

public class Ave extends Animal {
    @Override
    public void comer() {
        System.out.println("El ave está picoteando");
    }
}

Clases abstractas e interfaces

Clases abstractas

No pueden ser instanciadas y pueden contener métodos abstractos.

public abstract class Figura {
    public abstract double calcularArea();
}

Interfaces

Definen un conjunto de métodos que una clase debe implementar.

public interface Volador {
    void volar();
}

public class Pajaro implements Volador {
    @Override
    public void volar() {
        System.out.println("El pájaro está volando");
    }
}

Manejo de excepciones

Las excepciones manejan errores en tiempo de ejecución.

try {
    int division = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("Error: " + e.getMessage());
} finally {
    System.out.println("Bloque finally ejecutado");
}

Colecciones en Java

El framework de colecciones proporciona estructuras de datos como listas, conjuntos y mapas.

Listas

List<String> lista = new ArrayList<>();
lista.add("Elemento 1");
lista.add("Elemento 2");

Conjuntos

Set<Integer> conjunto = new HashSet<>();
conjunto.add(1);
conjunto.add(2);

Mapas

Map<String, Integer> mapa = new HashMap<>();
mapa.put("clave1", 100);
mapa.put("clave2", 200);

Entrada y salida (I/O)

Java proporciona clases para manejar archivos y flujos de datos.

try (BufferedReader br = new BufferedReader(new FileReader("archivo.txt"))) {
    String linea;
    while ((linea = br.readLine()) != null) {
        System.out.println(linea);
    }
} catch (IOException e) {
    e.printStackTrace();
}

Multihilo

Permite ejecutar varias tareas simultáneamente.

Creación de un hilo mediante Runnable

public class MiHilo implements Runnable {
    @Override
    public void run() {
        System.out.println("El hilo está corriendo");
    }
}

Thread hilo = new Thread(new MiHilo());
hilo.start();

Uso de la clase Thread

public class MiHilo extends Thread {
    @Override
    public void run() {
        System.out.println("El hilo está corriendo");
    }
}

MiHilo hilo = new MiHilo();
hilo.start();

Java Standard Library

Incluye una amplia gama de paquetes y clases útiles.

  • java.lang: Clases básicas como String, Math, Object.
  • java.util: Colecciones, fechas, utilidades.
  • java.io: Entrada y salida.
  • java.net: Operaciones de red.
  • java.sql: Acceso a bases de datos.

Herramientas de desarrollo (IDEs)

IntelliJ IDEA

IDE potente con características avanzadas.

Eclipse

Un entorno de desarrollo integrado popular y extensible.

NetBeans

IDE oficial patrocinado por Oracle.

Buenas prácticas en Java

  • Nombrado consistente: Usar convenciones de nomenclatura estándar.
  • Comentarios significativos: Añadir comentarios cuando sea necesario.
  • Gestión de excepciones adecuada: Manejar excepciones de forma efectiva.
  • Código modular: Dividir el código en métodos y clases lógicas.
  • Evitar código duplicado: Reutilizar código mediante herencia y composición.

Recursos adicionales

Aprende Java GRATIS online

Tutoriales de Java

Aprende Java con tutoriales de programación en Java.

Instalación De Java

Introducción Y Entorno

Configuración De Entorno Java

Introducción Y Entorno

Ecosistema Jakarta Ee De Java

Introducción Y Entorno

Tipos De Datos

Sintaxis

Variables

Sintaxis

Operadores

Sintaxis

Estructuras De Control

Sintaxis

Funciones

Sintaxis

Excepciones

Programación Orientada A Objetos

Clases Y Objetos

Programación Orientada A Objetos

Encapsulación

Programación Orientada A Objetos

Herencia

Programación Orientada A Objetos

Clases Abstractas

Programación Orientada A Objetos

Interfaces

Programación Orientada A Objetos

Sobrecarga De Métodos

Programación Orientada A Objetos

Polimorfismo

Programación Orientada A Objetos

La Clase Scanner

Programación Orientada A Objetos

Métodos De La Clase String

Programación Orientada A Objetos

Listas

Framework Collections

Conjuntos

Framework Collections

Mapas

Framework Collections

Funciones Lambda

Programación Funcional

Interfaz Funcional Consumer

Programación Funcional

Interfaz Funcional Predicate

Programación Funcional

Interfaz Funcional Supplier

Programación Funcional

Interfaz Funcional Function

Programación Funcional

Métodos Referenciados

Programación Funcional

Creación De Streams

Programación Funcional

Operaciones Intermedias Con Streams: Map()

Programación Funcional

Operaciones Intermedias Con Streams: Filter()

Programación Funcional

Operaciones Intermedias Con Streams: Distinct()

Programación Funcional

Operaciones Finales Con Streams: Collect()

Programación Funcional

Operaciones Finales Con Streams: Min Max

Programación Funcional

Operaciones Intermedias Con Streams: Flatmap()

Programación Funcional

Operaciones Intermedias Con Streams: Sorted()

Programación Funcional

Operaciones Finales Con Streams: Reduce()

Programación Funcional

Operaciones Finales Con Streams: Foreach()

Programación Funcional

Operaciones Finales Con Streams: Count()

Programación Funcional

Operaciones Finales Con Streams: Match

Programación Funcional

Api Optional

Programación Funcional

Api Java.nio 2

Entrada Y Salida (Io)

Api Java.time

Api Java.time

Ejercicios de programación de Java

Evalúa tus conocimientos en Java con ejercicios de programación Java de tipo Test, Puzzle, Código y Proyecto con VSCode.

Clases abstractas

Test

Streams: reduce()

Test

Streams: flatMap()

Test

Llamada y sobrecarga de funciones

Puzzle

Métodos referenciados

Test

Métodos de la clase String

Código

Representación de Fecha

Puzzle

Operadores lógicos

Test

Tipos de datos

Código

Estructuras de iteración

Puzzle

Streams: forEach()

Test

Objetos

Puzzle

Funciones lambda

Test

Uso de Scanner

Puzzle

CRUD en Java de modelo Customer sobre un ArrayList

Proyecto

Tipos de variables

Puzzle

Streams: collect()

Puzzle

Operadores aritméticos

Puzzle

Interfaz funcional Consumer

Test

API java.nio 2

Puzzle

API Optional

Test

Interfaz funcional Function

Test

Encapsulación

Test

Interfaces

Código

Uso de API Optional

Puzzle

Representación de Hora

Test

Herencia básica

Test

Clases y objetos

Código

Interfaz funcional Supplier

Puzzle

HashMap

Puzzle

Sobrecarga de métodos

Test

Polimorfismo de tiempo de ejecución

Puzzle

OOP en Java

Proyecto

Creación de Streams

Test

Streams: min max

Puzzle

Métodos avanzados de la clase String

Puzzle

Polimorfismo de tiempo de compilación

Test

Excepciones

Puzzle

Herencia avanzada

Puzzle

Estructuras de selección

Test

Uso de interfaces

Test

HashSet

Test

Objeto Scanner

Test

Streams: filter()

Puzzle

Operaciones de Streams

Puzzle

Interfaz funcional Predicate

Puzzle

Streams: sorted()

Test

Configuración de entorno

Test

CRUD en Java de modelo Customer sobre un HashMap

Proyecto

Uso de variables

Test

Clases

Test

Streams: distinct()

Puzzle

Streams: count()

Test

ArrayList

Test

Datos de referencia

Test

Interfaces funcionales

Puzzle

Métodos básicos de la clase String

Test

Instalación

Test

Funciones

Código

Estructuras de control

Código

Herencia de clases

Código

Streams: map()

Puzzle

Funciones y encapsulamiento

Test

Streams: match

Test

Gestión de errores y excepciones

Código

Datos primitivos

Puzzle

Tipo de tecnología

Lenguaje

Categoría laboral

Backend

Año de lanzamiento

1995

Developers

James Gosling y Sun Microsystems

Todos los módulos de Java

Ver todos los módulos de Java

Otras tecnologías

Vue.js
Vuejs

Vuejs

Frontend

Framework de JS progresivo para construir interfaces de usuario reactivas y modulares.

Selenium

Selenium

Testing / QA (Quality Assurance)

Suite de herramientas open-source para automatizar navegadores web y pruebas de software de interfaz de usuario.

TypeScript
TypeScript

TypeScript

Full Stack

Superconjunto de JavaScript con tipado estático.

Seaborn

Seaborn

Ciencia de Datos e Inteligencia artificial

Biblioteca de visualización de datos para Python.

CSharp

CSharp

Backend

Lenguaje de programación de Microsoft para aplicaciones robustas.

Spring Boot
SpringBoot

SpringBoot

Backend

Framework para desarrollo rápido de aplicaciones Java.

NestJS
Nest

Nest

Backend

Framework Node.js para crear aplicaciones escalables y eficientes.

Git
Git

Git

DevOps

Sistema de control de versiones distribuido.

React
React

React

Frontend

Librería framework para frontend interfaces de usuario.

Docker
Docker

Docker

DevOps

Plataforma de contenedores para aplicaciones portátiles.

Go
Go

Go

Backend

Lenguaje de programación eficiente y concurrente creado por Google.

SQL

SQL

Administración de bases de datos

Lenguaje para gestionar bases de datos relacionales.

Tailwind CSS
TailwindCSS

TailwindCSS

Frontend

Framework de utilidades CSS para diseños rápidos y personalizables.

Kotlin
Kotlin

Kotlin

Backend

Lenguaje de programación moderno y seguro para aplicaciones Android.

HTML5
HTML

HTML

Frontend

Lenguaje de marcado para estructurar contenido web.

NumPy
Numpy

Numpy

Ciencia de Datos e Inteligencia artificial

Biblioteca Python para computación científica y matrices.

GNU Bash
Bash

Bash

Administración de sistemas

Intérprete de comandos para sistemas Unix y Linux.

2022-09-27T22:26:51.030457 image/svg+xml Matplotlib v3.6.0, https://matplotlib.org/
Matplotlib

Matplotlib

Ciencia de Datos e Inteligencia artificial

Biblioteca Python para crear gráficos y visualizaciones.

Acceder a todas las tecnologías