Los paquetes se referencian en una forma similar a la jerarquía de directorios en Unix o DOS, separando los nombres de paquetes con un '.'. En la figura se aprecian los siguientes paquetes:
Las clases se accesan referenciando primero el paquete en que se encuentran y luego el nombre de la clase:P Q P.R
Consideraciones al usar paquetes:
Si el archivo no contiene esta cláusula entonces el paquete se coloca en un paquete por omisión.package P.R;
paquete.clasePor ejemplo en:
La primera referencia es la método M de la clase D que está en el paquete P.R.package Q; ... P.R.D.M() ... ... B.N() ...
En la segunda referencia no se especifica el paquete. En este caso se busca la clase B en el mismo paquete en donde aparece la referencia, es decir D. Por lo tanto se trata de Q.B y no P.B.
import paquete.clase;En el primer caso se interna el nombre de una clase específica de un paquete, la cuál podrá ser nombrada directamente como clase en el archivo que contiene la cláusula import.import paquete.*;
En el segundo caso se internan todas las clases de un paquete. Todas ellas se conocerán directamente por su nombre sin necesidad de colocar el paquete.
Por ejemplo:
O bien en otro archivo del paquete P.R:package Q; import P.C; ... C ... // es P.C
En caso de ambiguedad será necesario incluir el nombre del paquete.package P.R; import Q.*; ... B ... // es Q.B
Si la clase no se encuentra en ninguno de estos archivos, es un error. Esta búsqueda se realiza tanto al compilar como al ejecutar. Si al momento de accesar una clase ésta todavía no se encuentra compilada, es decir sólo se encuentra el archivo fuente, entonces se compila../P/R/D.class /home/yo/classes/P/R/D.class otrodir/P/R/D.class biblioteca de Java/P/R/D.class
java paquete.clase argumento, ...El intérprete busca la clase especificada usando el método descrito anteriormente. Luego en esta clase busca un método que tenga la siguiente declaración:
public static void main(String args[]) { ... }Si no se encuentra es un error. Posteriormente, el intérprete busca y carga (recursivamente) todas las clases que necesite la clase especificada. Luego ejecuta el código de inicialización de todas las clases.
Finalmente, el intérprete invoca el método main, pasándole en args todos los argumentos encontrados en la línea de comando.