Java/Package: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m →‎Archiviare le classi: snellisco un pochino
Riga 13:
<source lang=java>package saluti;</source>
I package hanno un sistema di nomi strutturato.
 
Gli ambienti integrati di sviluppo “IDE” usano loro modalità di stoccaggio delle classi per cui occorre vedere la documentazione relativa, questi ambienti nell'automatizzare e facilitare il processo, e spesso questo è utile, purtroppo oscurano la procedura.
 
Compilando “a mano” la procedura diventa trasparente, più chiara, almeno per quanto riguarda la formazione di pacchetti di classi del programmatore.
 
I nomi del package devono avere una corrispondenza diretta nel filesystem: ad esempio, se si vuole archiviare il file helloWorld.class nella cartella “saluti” del file system, la cartella "saluti" dovrà essere presente, perché è qui che vogliamo conservare il file insieme ad altri dello stesso argomento e crearci la nostra collezione di classi.
 
Dovrà esserci la directory saluti e dunque si pongono degli interrogativi: dove è montata la cartella saluti? A che livello del file System? Ricordiamoci che dopo deve essere anche ritovata e occorre sapere non solo il suo nome ma anche dov'è.
 
Entra in gioco un percorso parziale che comincia dalla root e si interrompe al livello superiore più vicino alla directory del package, il percorso a monte della cartella “saluti”. Questo percorso è importante se vogliamo ritrovare poi le nostre classi. Questo percorso si chiama "CLASSPATH". "CLASSPATH" è anche il nome della variabile di sistema che va settata con il valore del percorso. Del CLASSPATH ne parliamo dopo.
Line 42 ⟶ 36:
Questo indirizzo CLASSPATH dovrà essere lo stesso anche al momento della lettura delle classi, cosicché quando compiliamo un sorgente sia archiviando le classi e sia riusandole in lettura la JVM si riferirà alla medesima locazione di storage delle classi.
 
Il package può avere anche più directory. NelCon casopiù produciamodirectory moltecambia classidi essepoco: infattimetteremo andrannoun stipatepunto in“.” cartelletra diverseuna eddirectory ile nomel'altra; dellala cartella,jvm chiaramente,cambierà indicheràautomaticamente il contenutopunto nel carattere separatore del sistema operativo usato e la classe dovrà essere archiviata nell'ultima sottodirectory.
 
Con più directory cambia di poco: metteremo un punto “.” tra una directory e l'altra sul codice dopo l'istruzione package. La jvm cambierà automaticamente il punto nel carattere separatore del sistema operativo usato e la classe dovrà essere archiviata nell'ultima sottodirectory.
 
Facciamo, per esempio, delle classi di saluto simili ad HelloWorld, in molte lingue, per tirarle fuori al bisogno, secondo la lingua parlata dagli utenti del programma.
Line 75 ⟶ 67:
}
</source>
Se compilo ognuno di questi file con l'opzione "-d" del comando "javac", il compilatore appronterà sul disco la directory “saluti” con all'interno le cartelle “inghilterra”, “francia”, “italia”, tutte e tre queste cartelle sono allo stesso livello: sottodirectory di saluti.
appronterà sul disco la directory “saluti” con all'interno le cartelle “inghilterra”, “francia”, “italia”, tutte e tre queste cartelle sono allo stesso livello: sottodirectory di saluti.
 
Per comodità possiamo anche compilarle tutte in un colpo solo, a condizione che nella dir corrente vi sono solo questi tre file, con il comando
Line 84 ⟶ 75:
Non cambia niente per la prima parte dell'indirizzo, il classpath, di cui parlavamo sopra che rimane invariato.
 
Se archivio con un package così: “packages saluti.italia.dialetto”, allora ci sarà la cartella dialetto come sottodirectory della cartella italia. All'interno di dialetto dovranno esserci i file corrispondenti dei saluti italiani in dialetto, ognuno con un diverso nome.
Un'altra cartella ancora.
 
Se archivio con un package così “packages saluti.italia.dialetto” allora ci sarà la cartella dialetto come sottodirectory della cartella italia. All'interno di dialetto dovranno esserci i file corrispondenti dei saluti italiani in dialetto, ognuno con un diverso nome.
I file, anche se con nomi uguali “Helloworld.class”, sono stati messi, comunque, in directory separate e i file dal nome diverso nella medesima directory. Tutti sono comunque individuabili e riprendibili.
 
L' istruzione <source lang=java>package nomedelpackage;</source> è facoltativa, è possibile non metterla: se queste non c'è, il compilatore inserisce la classe in un package di default.
 
I files del package di default saranno inseriti dalla JVM nella radice del percorso del CLASSPATH: da questo stesso posto verranno lette le classi automaticamente dalla JVM.
 
L' istruzione <source lang=java>package nomedelpackage;</source> è facoltativa, è possibile non metterla: se queste non c'è, il compilatore inserisce la classe in un package di default.
Vediamo come riusare le nostre classi.
 
== Importare le classi ==