Newsgroup: it.comp.java
Titolo: Importare le classi

Come si importano nuove classi in java ?
Nei sorgenti, trovo che le istruzioni tipo
import java.io.*
significano importare tutti i file .class presenti nella directory java\io del 
file classes.zip.
per importare una nuova classe, tipo prova.class devo scrivere
import prova.class
ma dove devo mettere il file ? in quale directory ?
devo metterlo nel file classes.zip ?
HELP ME !
zava...@mailexcite.com


Vedo di risponderti anche se la mia conoscenza di Java e' limitata.
Non puoi importare con import semplici classi ma solo quelle inserite in
packages. Per utilizzare una singola classe essa deve essere presente
nella variabile d'ambiente CLASSPATH. Dunque se oltre alle classi
standard di java vuoi utilizzare altre classi da te create basta che le
metti in una directory e aggiungi la directory alla variabile d'ambiente
suddetta.
Meglio e', pero', crearti per l'appunto dei packages personalizzati.
Per fare questo basta mettere come prima riga dei file java appartenti
al package il comanda package.
Se vuoi che una classe quiquoqua.class appartenga ad un package che si
chiama pippo.pluto.paperino devi definire nel file quiquoqua.java il
comando
package pippo.pluto.paperino;
e salvare la classe nella subdirectory pippo/pluto/paperino.
Ovviamente la root di questa subdir deve essere contenuta nella
variabile d'ambiente CLASSPATH.
Per usare poi quella classe in un altra basta che la importi con il
comando
import pippo.pluto.paperino.quiquoqua;
oppure
import pippo.pluto.paperino.*;
che le importa tutte.
Spero di essere stato chiaro e di non aver detto baggianate  (..se si
potete anche correggermi;)
BAI
-- 
------------------------------------------------------------
+               Bruni Emiliano - nick "Emi_B"              +
------------------------------------------------------------
+Software developer          +Software developer           +
+             &              +              &              +
+          internet assistant+        network administrator+
+                            +                             +
+Istituto zoo----profilattico+ -- --     ____  ____   ____ +
+sperimentale ///"G.Caporale"+|  |  | | |     |      | S. |+
+dell'abruzzo/// e del molise+|     | | |      ----  | r. |+
+  64100    ----    TERAMO   +|     | | |____  ____| |_l._|+
+                            +                             +
+
http://www.izs.it/~ebruni/
  + 
http://www.micso.it/bruni
   +
+       
e-mail:ebr...@izs.it
 +     
e-mail:br...@micso.it
   +
+----------------------------------------------------------+
+ Per inviarmi un messaggio elimina la parola "levalo" dal +
+ mio e-mail                                               +
+--------------------------------------------------------- +

 
La cosa e' piu' semplice di quanto sembri. Il namespace di java e' diviso, come hai gia' visto, in packages: quelli con nome esplicito (
java.io
, mieclassi.package1,  etc) e quello di default (senza
nome).
Il nome completo di una classe e' decorato con il package di appartenenza (ad es. java.net.URL); se il package non e' dichiarato, si intende quello di default.
La JVM lavora solo con nomi in questo tipo di spazio, fatto quindi da stringhe del tipo 
	xxx.yyy. ... .NomeClasse
Un oggetto ClassLoader ha, tra altre cose, il compito di mappare questi nomi su un dispositivo di memorizzazione in modo da recuperare quando serve il codice della classe. 
Il ClassLoader standard (java.lang.ClassLoader) usa queste semplici convenzioni: 
	- il package di default corrisponde alla directory corrente (quindi, ad es., 
	  il nome MiaClasse viene cercato in ./MiaClasse.class)
	- dato un nome di package (ad esempio mieclassi.package1), questo nome viene trasformato 
	  sostituendo il path separator (\ su sistemi dos, / su sistemi unix) ai punti (ottenendo 
	  quindi, nell'esempio, mieclassi\package1) e quindi utilizzato come path *relativo*, a partire
	  da tutte le directory indicate nella variabile d'ambiente CLASSPATH.
	- se in classpath e' indicato un file compresso che supporta un filesystem (come ad esempio zip),
	  il path viene cercato anche all'interno del file compresso.
	- una volta trovato il path, si cerca finalmente un file con il nome della classe, concatenato con
	  l'estensione ".class" (ad esempio, mieclassi.package1.classe1 => mieclassi\package1\classe1.class)
Quindi se in CLASSPATH hai (sotto nt/95) "c:\jdk1.1.5\lib\classes.zip;c:\ClassiJava;." significa che il path generato a partire dal nome Java viene cercato come sottopath in
"c:\jdk1.1.5\lib\classes.zip" e a partire da 
"c:\ClassiJava" e dalla directory corrente (".").
In buona sostanza, dovrai mettere la classe 
	"mieclassi.package1.classe1" 
in 
	"c:\ClassiJava\mieclassi\package1\classe1.class" o in 
	".\mieclassi\pakcage1\classe1.class"
Nota bene che questa e' solo *uno* dei possibili mappings tra nomi java e relative classi compilate: ad esempio in una applicazione, ridefinendo il ClassLoader, e' possibilissimo tenere il codice in
un database, ad esempio mappando i nomi XXX.YYY.CCC in tabelle di nome XXX_YYY_CCC. 
Saluti, 
	CS
-- 
Cristiano Sadun
Software Engineering & Consulting
email address: cris#sun6$itim$mi$cnr$it 
(for actual address please replace # by @ and $ by .)