Hoja de Trucos de Java
Aprende Java con Laboratorios Prácticos
Aprende programación Java a través de laboratorios prácticos y escenarios del mundo real. LabEx proporciona cursos completos de Java que cubren sintaxis esencial, programación orientada a objetos, colecciones, manejo de excepciones y mejores prácticas. Domina los fundamentos del desarrollo en Java y construye aplicaciones robustas.
Estructura del Programa y Sintaxis Básica
Hola Mundo: Programa Básico
El programa Java más simple que muestra “Hello, World!” en la pantalla.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Declaración de Clase: public class
Una clase es una plantilla/plano que describe el comportamiento/estado que soportan los objetos.
public class MyClass {
// El contenido de la clase va aquí
int myVariable;
public void myMethod() {
System.out.println("Hello from method!");
}
}
Método Main: Punto de Entrada del Programa
El método principal es donde comienza la ejecución del programa Java.
public static void main(String[] args) {
// Código del programa aquí
System.out.println("Program starts here");
}
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
Comentarios: Documentación del Código
Usa comentarios de una sola línea (//) y de varias líneas (/* */) para hacer el código más comprensible y mantenible.
// Comentario de una sola línea
System.out.println("Hello");
/* Comentario de varias líneas
Puede abarcar varias líneas
Usado para explicaciones detalladas */
Sentencias y Punto y Coma
Cada sentencia en Java debe terminar con un punto y coma.
int number = 10;
String name = "Java";
System.out.println(name);
Bloques de Código: Llaves
Los bloques de código están encerrados entre llaves {}, marcando el inicio y el final de las secciones de código.
public class Example {
public void method() {
if (true) {
System.out.println("Inside if block");
}
}
}
Tipos de Datos y Variables
Tipos de Datos Primitivos
Tipos de datos básicos integrados en el lenguaje Java.
// Tipos enteros
byte smallNum = 127; // -128 a 127
short shortNum = 32000; // -32,768 a 32,767
int number = 100; // -2^31 a 2^31-1
long bigNum = 10000L; // -2^63 a 2^63-1
// Tipos de punto flotante
float decimal = 3.14f; // Precisión simple
double precision = 3.14159; // Doble precisión
// Otros tipos
char letter = 'A'; // Carácter único
boolean flag = true; // true o false
Declaración e Inicialización de Variables
Crear y asignar valores a variables.
// Declaración solamente
int age;
String name;
// Declaración con inicialización
int age = 25;
String name = "John";
// Declaraciones múltiples
int x = 10, y = 20, z = 30;
// Variables finales (constantes)
final double PI = 3.14159;
Operaciones con Cadenas (String)
Las cadenas representan secuencias de caracteres y son inmutables, lo que significa que una vez creados, sus valores no se pueden cambiar.
String greeting = "Hello";
String name = "World";
// Concatenación de cadenas
String message = greeting + " " + name;
System.out.println(message); // "Hello World"
// Métodos de cadena
int length = message.length();
boolean isEmpty = message.isEmpty();
String uppercase = message.toUpperCase();
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
Sentencias de Flujo de Control
Sentencias Condicionales: if, else if, else
Ejecutan diferentes bloques de código basados en condiciones.
int score = 85;
if (score >= 90) {
System.out.println("Grade A");
} else if (score >= 80) {
System.out.println("Grade B");
} else if (score >= 70) {
System.out.println("Grade C");
} else {
System.out.println("Grade F");
}
Sentencia Switch
Ramificación de múltiples vías basada en los valores de las variables.
int day = 3;
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
default:
System.out.println("Other day");
}
Bucle For: Repetición Contada
Repetir código un número específico de veces.
// Bucle for estándar
for (int i = 0; i < 5; i++) {
System.out.println("Count: " + i);
}
// Bucle for mejorado (for-each)
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println("Number: " + num);
}
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
Bucles While y Do-While
Repetir código mientras una condición sea verdadera.
// Bucle While
int i = 0;
while (i < 3) {
System.out.println("While: " + i);
i++;
}
// Bucle Do-while (ejecuta al menos una vez)
int j = 0;
do {
System.out.println("Do-while: " + j);
j++;
} while (j < 3);
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
while y do-while?Programación Orientada a Objetos
Clases y Objetos
Los objetos tienen estados y comportamientos. Un objeto es una instancia de una clase.
public class Car {
// Variables de instancia (estado)
String color;
String model;
int year;
// Constructor
public Car(String color, String model, int year) {
this.color = color;
this.model = model;
this.year = year;
}
// Método (comportamiento)
public void start() {
System.out.println("Car is starting...");
}
}
// Creación de objetos
Car myCar = new Car("Red", "Toyota", 2022);
myCar.start();
Constructores
Métodos especiales utilizados para inicializar objetos.
public class Person {
String name;
int age;
// Constructor por defecto
public Person() {
name = "Unknown";
age = 0;
}
// Constructor parametrizado
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Herencia: extends
La herencia permite la reutilización de código y crea relaciones jerárquicas entre clases.
public class Animal {
protected String name;
public void eat() {
System.out.println(name + " is eating");
}
}
public class Dog extends Animal {
public Dog(String name) {
this.name = name;
}
public void bark() {
System.out.println(name + " is barking");
}
}
Dog myDog = new Dog("Buddy");
myDog.eat(); // Método heredado
myDog.bark(); // Método propio
Modificadores de Acceso
Los modificadores controlan el acceso a clases, métodos y variables.
public class Example {
public int publicVar; // Accesible en todas partes
private int privateVar; // Solo dentro de esta clase
protected int protectedVar; // Dentro del paquete + subclases
int defaultVar; // Solo dentro del paquete
private void privateMethod() {
// Solo accesible dentro de esta clase
}
}
Métodos y Funciones
Declaración de Método
Un método es básicamente un comportamiento donde se escribe la lógica, se manipulan los datos y se ejecutan las acciones.
public class Calculator {
// Método con parámetros y valor de retorno
public int add(int a, int b) {
return a + b;
}
// Método sin valor de retorno
public void printSum(int a, int b) {
int result = add(a, b);
System.out.println("Sum: " + result);
}
// Método estático (pertenece a la clase)
public static int multiply(int a, int b) {
return a * b;
}
}
Sobrecarga de Métodos (Method Overloading)
Múltiples métodos con el mismo nombre pero diferentes parámetros.
public class MathUtils {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
}
Parámetros de Método y Tipos de Retorno
Pasar datos a métodos y devolver resultados.
public class StringHelper {
// Método con parámetro String y retorno
public String formatName(String firstName, String lastName) {
return firstName + " " + lastName;
}
// Método con parámetro de array
public int findMax(int[] numbers) {
int max = numbers[0];
for (int num : numbers) {
if (num > max) {
max = num;
}
}
return max;
}
}
Métodos Recursivos
Métodos que se llaman a sí mismos para resolver problemas.
public class RecursiveExamples {
// Calcular factorial
public int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
// Secuencia de Fibonacci
public int fibonacci(int n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
Arrays y Colecciones
Declaración e Inicialización de Arrays
Crear e inicializar arrays de diferentes tipos.
// Declaración e inicialización de array
int[] numbers = {1, 2, 3, 4, 5};
String[] names = {"Alice", "Bob", "Charlie"};
// Array con tamaño especificado
int[] scores = new int[10];
scores[0] = 95;
scores[1] = 87;
// Obtener la longitud del array
int length = numbers.length;
System.out.println("Length: " + length);
// Recorrer el array
for (int i = 0; i < numbers.length; i++) {
System.out.println("Element " + i + ": " + numbers[i]);
}
Arrays Multidimensionales
Arrays de arrays para estructuras de datos tipo matriz.
// Declaración de array 2D
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Acceder a elementos
int element = matrix[1][2]; // Obtiene 6
// Recorrer array 2D
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
ArrayList: Arrays Dinámicos
Arrays redimensionables que pueden crecer y encogerse dinámicamente.
import java.util.ArrayList;
// Crear ArrayList
ArrayList<String> list = new ArrayList<>();
// Añadir elementos
list.add("Apple");
list.add("Banana");
list.add("Orange");
// Obtener elemento
String fruit = list.get(0); // Obtiene "Apple"
// Eliminar elemento
list.remove(1); // Elimina "Banana"
// Tamaño e iteración
System.out.println("Size: " + list.size());
for (String item : list) {
System.out.println(item);
}
HashMap: Pares Clave-Valor
Almacenar datos como pares clave-valor para una búsqueda rápida.
import java.util.HashMap;
// Crear HashMap
HashMap<String, Integer> ages = new HashMap<>();
// Añadir pares clave-valor
ages.put("Alice", 25);
ages.put("Bob", 30);
ages.put("Charlie", 35);
// Obtener valor por clave
int aliceAge = ages.get("Alice");
// Comprobar si la clave existe
if (ages.containsKey("Bob")) {
System.out.println("Bob's age: " + ages.get("Bob"));
}
Manejo de Excepciones
Bloques Try-Catch
Manejar excepciones para evitar que el programa se bloquee.
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = 10 / 0; // Esto lanzará ArithmeticException
System.out.println("Result: " + result);
} catch (ArithmeticException e) {
System.out.println("Cannot divide by zero!");
System.out.println("Error: " + e.getMessage());
} finally {
System.out.println("This always executes");
}
}
}
Múltiples Bloques Catch
Manejar diferentes tipos de excepciones por separado.
public void processArray(String[] arr, int index) {
try {
int number = Integer.parseInt(arr[index]);
int result = 100 / number;
System.out.println("Result: " + result);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Invalid array index");
} catch (NumberFormatException e) {
System.out.println("Invalid number format");
} catch (ArithmeticException e) {
System.out.println("Cannot divide by zero");
}
}
Lanzamiento de Excepciones Personalizadas
Crear y lanzar tus propias excepciones.
public class AgeValidator {
public void validateAge(int age) throws IllegalArgumentException {
if (age < 0) {
throw new IllegalArgumentException("Age cannot be negative");
}
if (age > 150) {
throw new IllegalArgumentException("Age seems unrealistic");
}
System.out.println("Valid age: " + age);
}
public static void main(String[] args) {
AgeValidator validator = new AgeValidator();
try {
validator.validateAge(-5);
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Tipos de Excepciones Comunes
Excepciones frecuentemente encontradas en programas Java.
// NullPointerException
String str = null;
// str.length(); // Lanza NullPointerException
// ArrayIndexOutOfBoundsException
int[] arr = {1, 2, 3};
// int val = arr[5]; // Lanza ArrayIndexOutOfBoundsException
// NumberFormatException
// int num = Integer.parseInt("abc"); // Lanza NumberFormatException
// FileNotFoundException (al trabajar con archivos)
// IOException (operaciones I/O generales)
Operaciones de Entrada/Salida
Entrada de Consola: Clase Scanner
Leer la entrada desde el teclado usando Scanner.
import java.util.Scanner;
public class InputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = scanner.nextLine();
System.out.print("Enter your age: ");
int age = scanner.nextInt();
System.out.print("Enter your height: ");
double height = scanner.nextDouble();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("Height: " + height);
scanner.close();
}
}
Salida de Consola: System.out
Mostrar la salida en la consola en varios formatos.
public class OutputExample {
public static void main(String[] args) {
// Salida básica
System.out.println("Hello, World!");
System.out.print("No newline");
System.out.print(" continues here\n");
// Salida formateada
String name = "Java";
int version = 17;
System.out.printf("Welcome to %s %d!%n", name, version);
// Salida de variables
int x = 10, y = 20;
System.out.println("x = " + x + ", y = " + y);
System.out.println("Sum = " + (x + y));
}
}
Lectura de Archivos: BufferedReader
Leer archivos de texto línea por línea de manera eficiente.
import java.io.*;
public class FileReadExample {
public static void readFile(String filename) {
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String line;
int lineNumber = 1;
while ((line = reader.readLine()) != null) {
System.out.println(lineNumber + ": " + line);
lineNumber++;
}
} catch (IOException e) {
System.out.println("Error reading file: " + e.getMessage());
}
}
}
Escritura de Archivos: PrintWriter
Escribir datos de texto en archivos con manejo adecuado de excepciones.
import java.io.*;
public class FileWriteExample {
public static void writeFile(String filename, String[] data) {
try (PrintWriter writer = new PrintWriter(new FileWriter(filename))) {
writer.println("# Data File");
writer.println("Generated on: " + new java.util.Date());
writer.println();
for (int i = 0; i < data.length; i++) {
writer.println("Line " + (i + 1) + ": " + data[i]);
}
System.out.println("File written successfully!");
} catch (IOException e) {
System.out.println("Error writing file: " + e.getMessage());
}
}
}
Entorno de Desarrollo Java
Instalación de JDK
JDK (Java Development Kit) = JRE + Herramientas de Desarrollo. Requerido para desarrollar aplicaciones Java.
# Descargar JDK desde Oracle u OpenJDK
# Instalar JDK en su sistema
# Establecer la variable de entorno JAVA_HOME
export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH
# Verificar instalación
java -version
javac -version
Compilar y Ejecutar Programas Java
Usar javac para compilar código fuente Java y java para ejecutar el programa compilado.
# Compilar archivo fuente Java
javac MyProgram.java
# Ejecutar programa Java compilado
java MyProgram
# Compilar con classpath
javac -cp .:mylib.jar MyProgram.java
# Ejecutar con classpath
java -cp .:mylib.jar MyProgram
Configuración de IDE y Desarrollo
Entornos de Desarrollo Integrados populares para el desarrollo en Java.
# IDEs populares para Java:
# - IntelliJ IDEA (JetBrains)
# - Eclipse IDE
# - Visual Studio Code con extensiones de Java
# - NetBeans
# Compilación desde la línea de comandos
javac -d bin src/*.java
java -cp bin MainClass
# Creación de archivo JAR
jar cf myapp.jar -C bin .
Mejores Prácticas y Patrones Comunes
Convenciones de Nomenclatura
Sigue los estándares de nomenclatura de Java para una mejor legibilidad del código.
// Clases: PascalCase
public class StudentManager { }
public class BankAccount { }
// Métodos y variables: camelCase
int studentAge;
String firstName;
public void calculateGrade() { }
public boolean isValidEmail() { }
// Constantes: UPPER_CASE
public static final int MAX_SIZE = 100;
public static final String DEFAULT_NAME = "Unknown";
// Paquetes: minúsculas
package com.company.project;
package utils.database;
package com.example.myapp;
Organización del Código
Estructurar tus programas Java para su mantenibilidad.
import java.util.ArrayList;
import java.util.Scanner;
/**
* Esta clase demuestra una buena organización del código Java
* @author Your Name
* @version 1.0
*/
public class WellOrganizedClass {
// Constantes primero
private static final int MAX_ATTEMPTS = 3;
// Variables de instancia
private String name;
private int value;
// Constructor
public WellOrganizedClass(String name) {
this.name = name;
this.value = 0;
}
// Métodos públicos
public void doSomething() {
// Implementación
}
// Métodos de ayuda privados
private boolean isValid() {
return value > 0;
}
}
Prevención de Errores
Prácticas comunes para evitar errores y mejorar la calidad del código.
public class BestPractices {
public void safeDivision(int a, int b) {
// Comprobar división por cero
if (b == 0) {
throw new IllegalArgumentException("Cannot divide by zero");
}
int result = a / b;
System.out.println("Result: " + result);
}
public void safeStringOperations(String input) {
// Comprobación de nulos antes de usar cadenas
if (input != null && !input.isEmpty()) {
System.out.println("Length: " + input.length());
System.out.println("Uppercase: " + input.toUpperCase());
} else {
System.out.println("Invalid input string");
}
}
public void safeArrayAccess(int[] array, int index) {
// Comprobación de límites
if (array != null && index >= 0 && index < array.length) {
System.out.println("Value: " + array[index]);
} else {
System.out.println("Invalid array access");
}
}
}
Gestión de Recursos
Manejar correctamente los recursos para prevenir fugas de memoria.
import java.io.*;
public class ResourceManagement {
// Try-with-resources (limpieza automática)
public void readFileProper(String filename) {
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String line = reader.readLine();
System.out.println(line);
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
// El Reader se cierra automáticamente
}
// Limpieza manual de recursos (no recomendado)
public void readFileManual(String filename) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(filename));
String line = reader.readLine();
System.out.println(line);
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
System.out.println("Error closing reader");
}
}
}
}
}