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.
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.
- Oracle JDK: Descargar desde Oracle
- OpenJDK: Descargar desde 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
alPATH
.
- Añadir
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
- Editar el archivo
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
- Documentación oficial de Java: docs.oracle.com
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
Streams: reduce()
Streams: flatMap()
Llamada y sobrecarga de funciones
Métodos referenciados
Métodos de la clase String
Representación de Fecha
Operadores lógicos
Tipos de datos
Estructuras de iteración
Streams: forEach()
Objetos
Funciones lambda
Uso de Scanner
CRUD en Java de modelo Customer sobre un ArrayList
Tipos de variables
Streams: collect()
Operadores aritméticos
Interfaz funcional Consumer
API java.nio 2
API Optional
Interfaz funcional Function
Encapsulación
Interfaces
Uso de API Optional
Representación de Hora
Herencia básica
Clases y objetos
Interfaz funcional Supplier
HashMap
Sobrecarga de métodos
Polimorfismo de tiempo de ejecución
OOP en Java
Creación de Streams
Streams: min max
Métodos avanzados de la clase String
Polimorfismo de tiempo de compilación
Excepciones
Herencia avanzada
Estructuras de selección
Uso de interfaces
HashSet
Objeto Scanner
Streams: filter()
Operaciones de Streams
Interfaz funcional Predicate
Streams: sorted()
Configuración de entorno
CRUD en Java de modelo Customer sobre un HashMap
Uso de variables
Clases
Streams: distinct()
Streams: count()
ArrayList
Datos de referencia
Interfaces funcionales
Métodos básicos de la clase String
Instalación
Funciones
Estructuras de control
Herencia de clases
Streams: map()
Funciones y encapsulamiento
Streams: match
Gestión de errores y excepciones
Datos primitivos
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
Java
Introducción y entorno
Java
Sintaxis
Java
Programación Orientada a Objetos
Java
Framework Collections
Java
Programación Funcional
Java
Entrada y salida (IO)
Java
API java.time
Otras tecnologías
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
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.
SpringBoot
SpringBoot
Backend
Framework para desarrollo rápido de aplicaciones Java.
Nest
Nest
Backend
Framework Node.js para crear aplicaciones escalables y eficientes.
Git
Git
DevOps
Sistema de control de versiones distribuido.
React
React
Frontend
Librería framework para frontend interfaces de usuario.
Docker
Docker
DevOps
Plataforma de contenedores para aplicaciones portátiles.
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.
TailwindCSS
TailwindCSS
Frontend
Framework de utilidades CSS para diseños rápidos y personalizables.
Kotlin
Kotlin
Backend
Lenguaje de programación moderno y seguro para aplicaciones Android.
HTML
HTML
Frontend
Lenguaje de marcado para estructurar contenido web.
Numpy
Numpy
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para computación científica y matrices.
Bash
Bash
Administración de sistemas
Intérprete de comandos para sistemas Unix y Linux.
Matplotlib
Matplotlib
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para crear gráficos y visualizaciones.