Paquetes en Java: Gestión de Espacios de Nombres, Acceso y Organización de Código
Los paquetes (packages) en Java se usan para:
- Evitar conflictos de nombres.
- Controlar acceso (visibilidad).
- Facilitar búsqueda, localización y uso de clases, interfaces, enumeraciones y anotaciones.
Un Paquete es un agrupamiento de tipos relacionados que proporciona protección de acceso y gestión de espacios de nombres.
Paquetes Existentes en Java
java.lang: Clases fundamentales (importado automáticamente).java.io: Clases de entrada/salida.java.util: Colecciones, utilidades, fechas, etc.java.net: Redes.- Y muchos más...
Los programadores pueden definir sus propios paquetes para agrupar clases relacionadas. Es buena práctica usar nombres en minúsculas para evitar colisiones con nombres de clases.
Creación de un Paquete
- Elige un nombre (p. ej.,
animals). - Incluye la sentencia
package animals;como primera línea en cada archivo fuente que pertenezca al paquete. - Solo una sentencia
packagepor archivo; aplica a todos los tipos del archivo. - Si no hay sentencia
package, la clase va al paquete por defecto (sin nombre).
Compilación con Paquetes
Usa la opción -d para especificar el directorio destino:
javac -d Destination_folder file_name.java
Se crea una carpeta con el nombre del paquete y los .class compilados se colocan dentro.
Ejemplo: Paquete animals
/* File: Animal.java */
package animals;
interface Animal {
void eat();
void travel();
}
/* File: MammalInt.java */
package animals;
public class MammalInt implements Animal {
public void eat() { System.out.println("Mamífero come"); }
public void travel() { System.out.println("Mamífero viaja"); }
public int noOfLegs() { return 0; }
public static void main(String args[]) {
MammalInt m = new MammalInt();
m.eat(); m.travel();
}
}
Compilar:
javac -d . Animal.java
javac -d . MammalInt.java
Se crea carpeta animals/ con los .class dentro.
Palabra Clave import
Para usar una clase de otro paquete.
- Clases en el mismo paquete: no necesitan import.
- Clases en paquete distinto: tres opciones:
- Nombre completamente calificado:
payroll.Employee - Importar paquete completo:
import payroll.*; - Importar clase específica:
import payroll.Employee;(recomendado)
- Nombre completamente calificado:
Nota: Las sentencias import van después de package y antes de la declaración de clase.
Estructura de Directorios de los Paquetes
Dos reglas clave:
- El nombre del paquete forma parte del nombre calificado de la clase:
vehicle.Car. - El nombre del paquete debe coincidir con la estructura de directorios donde residen los
.class.
Convención Estándar
// File: Car.java
package vehicle;
public class Car { ... }
Ubicación fuente: ...\vehicle\Car.java (Windows) o .../vehicle/Car.java (Unix).
Nombres de Paquete Basados en Dominio Inverso
Una compañía usa su dominio invertido: com.apple.computers.
// File: Dell.java
package com.apple.computers;
public class Dell { }
Estructura: ...\com\apple\computers\Dell.java
Al compilar con javac -d . Dell.java:
.\com\apple\computers\Dell.class
.\com\apple\computers\Ups.class
Importar Todo un Paquete
import com.apple.computers.*;
Separación de Fuentes y Clases Compiladas
Puedes organizar fuentes y clases en directorios distintos:
\sources\com\apple\computers\Dell.java
\classes\com\apple\computers\Dell.class
Ventajas: dar acceso a classes sin revelar fuentes; gestión independiente.
La ruta completa al directorio classes se llama class path y se configura con la variable de sistema CLASSPATH.
Configurar Variable CLASSPATH
| Sistema | Comando |
|---|---|
| Windows (ver) | set CLASSPATH |
| UNIX (ver) | echo $CLASSPATH |
| Windows (borrar) | set CLASSPATH= |
| UNIX (borrar) | unset CLASSPATH; export CLASSPATH |
| Windows (establecer) | set CLASSPATH=C:\users\jack\java\classes |
| UNIX (establecer) | CLASSPATH=/home/jack/java/classes; export CLASSPATH |
Por defecto, el directorio actual y el JAR de la plataforma Java están en el classpath.
Java
- Paquetes en Python: Estructura, Importación y Mejores Prácticas
- Palabra clave final en Java: Variables, métodos y clases
- Operador instanceof en Java: Guía completa
- Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos
- Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos
- Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
- Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
- Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
- Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
- Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe
- Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación