  |
un package corrisponde ad una directory |
  |
una classe corrisponde ad un file .class nella directory del package |
  |
Esempio: java.util.Vector equivale a: |
File DOS : java\util\Vector.class
File UNIX: java/util/Vector.class
Abbiamo visto il nome del package, che è gerarchico: solitamente sono nomi in minuscolo separati da un punto. In realtà un package è una directory. Il sistema cerca le classi in una directory che ha lo stesso nome del package a partire da le directory nel cosiddetto CLASSPATH. La barra specifica del sistema sostituisce il punto. Per esempio nei sistemi UNIX al posto del punto si utilizza la barra diretta, nei sistemi basati sul DOS si utilizza la barra inversa.
  |
CLASSPATH: |
  |
Regola: una classe viene cercata nella sottodirectory
corrispondente a partire dalle directory nel classpath |
Vediamo adesso le regole che vengono utilizzate per localizzare una classe quando questa viene richiesta. Abbiamo visto che Java carica le classi in memoria quando qualcuno vi fa riferimento. Le classi hanno un nome gerarchico che comprende il loro package. Il package serve a anche per indicare in quale sotto directory bisogna cercare la classe. Le directory da cui parte la ricerca sono elencate nel CLASSPATH. Questo è un parametro che viene fornito all'interprete sulla riga di comando oppure usando lo variabile di ambiente CLASSPATH.
  |
se CLASSPATH=c:\java;c:\java\lib |
  |
allora java.util.Vector viene cercata in: |
1. c:\java\lib\java\util\Vector.class
2. c:\java\util\Vector.class
Quindi se io faccio riferimento alla classe java.util.Vector e ho nel CLASSPATH le directory C:\java e C:\java\lib, si controllerà che non esista un file C:\Java\java\util\Vector.class o un file C:\Java\lib\java\util\Vector.class. Fare attenzione che questo meccanismo a volte sfugge ai principianti.
  |
il package di default (senza dichiarazione di package) non ha una sottodirectory |
  |
le classi senza package vengono cercate nelle directory del classpath |
Il package di default è quello che si ha se si ha omesso la dichiarazione package, corrisponde alla radice di ogni classe nel CLASSPATH.
|