Differenze tra le versioni di "Java/Classi e oggetti"

→‎Importare le classi: sposto anche questa aprte
(→‎Importare le classi: sposto anche questa aprte)
In ogni caso non è possibile dichiarare private o protected una classe altrimenti non potrebbe essere estesa e questo non è possibile nella O.O.P..
'''L'interfaccia pubblica''' è costituita dall'insieme dei membri e istanze pubbliche, nel nostro esempio (Nomedellaclasse) tutte le istanze sono pubbliche. Se invece di “public” vi fosse “private” allora la classe avrebbe anche un''''interfaccia privata''' ed i membri “private” sono raggiungibili solo all'interno della classe o da classi annidate o da metodi “getter” e “setting” se presenti. Vedere[[Java/Modificatori| il capitolo sui modificatori]]. Le classi si passano informazioni e dati solo tramite l'interfaccia pubblica.
 
== Importare le classi ==
 
Per riutilizzare le classi stoccate in precedenza è necessario ma solo per i package personali come quelli che abbiamo fatto sopra usare la variabile di sistema CLASSPATH.
 
La JVM per i package standard di java, ovvero le API del linguaggio java, è già a posto , se li trova
automaticamente da sola, in quanto generalmente l'installazione del jDK, fatta normanlmente, include il percorso automaticamente. Quindi questo è valido per le installazioni tipiche. È possibile per installazioni personalizzate inserire classpath anche per le API standard se queste fossero in directory scelte da noi.
 
Il Classpath serve, per dirgli dove sono solo i nostri package.
 
Per esempio i file archiviati Helloworld sono in /home/giovanni/mieclassi/ .
Per usare le classi dei package bisogna scrivere la parola chiave <tt>import</tt>.
Precisamente <source lang=java>import nomedelpackage;</source>
Questa istruzione va inserita dopo "package", se presente (perché è opzionale), e prima di "class".
 
Vogliamo riusare le classi che abbiamo già fatto. Per farlo dobbiamo dire all'interprete dove sono le classi e in contemporanea quali sono. Dove e quali...
 
Se volessimo richiamare le nostre classi, prima archiviate, dovremo scrivere nel codice
<source lang=java>import saluti.inghilterra.*;</source>
dove "saluti.inghilterra" stanno ad indicare la directory e sottodirectory e l'asterisco i nomi dei file (asterisco = vogliamo tutti i file).
L'interprete inserirà, prima della directory "saluti", il percorso del classpath e così troverà lindirizzo assoluto delle classi archiviate, vedrà anche l'asterisco e quindi ad ogni chiamata andrà a prendere il file corrispondente. Se non mettessimo l'asterisco dovremo mettere il nome preciso del file.class. Invece e quasi sempre, abbiamo bisogno di riusare molte classi e perciò è comodo l'asterisco.
 
Faremo questo codice per i saluti in inglese:
 
<source lang=java>
 
import saluti.inghilterra.*;
 
class Test{
public static void main(String [] args){
 
HelloWorld inglese = new HelloWorld();
inglese.faisaluto();
 
}
}
 
</source>
 
Lo compileremo a riga di comando così:
javac -classpath /home/giovanni/mieclassi/ Test.java
 
Lo eseguiremo a riga di comando così:
java -classpath ./:/home/giovanni/mieclassi/ Test
Ed otteremo l'output:
Hello, world!
Attenzione tra il primo classpath e il secondo c'è una differenza ed è il "." punto.
Il classpath si può settare anche nelle variabili utente del sistema operativo e in questo modo non siamo più costretti a digitare un interminabile comando con opzioni strane con il rischio di sbagliare, ma basta solo un " "java"o un "javac".
 
Per windows:
Pannello di Controllo - Sistema - Avanzate - Variabili d'ambiente - Variabili utente.
Ad esempio:
.;C:\Java\mieclassi
 
Per linux da shell:
ad esempio
export CLASSPATH= ./:/home/giovanni/mieclassi
 
Attenzione: nel capitolo installazione abbiamo parlato della variabile PATH che quì non c'entra niente, sono due cose molto diverse, alcuni le confondono.
La variabile PATH fa riferimento agli eseguibili java come i programmi java, javac, jar, ed altri, mentre la CLASSPATH punta alle classi.
Attenzione si ripete che è importante il "." punto nel classpath che rimanda ai file presenti nella dir corrente: questo è importante se vogliamo eseguire (comando "java") i file. class che abbiamo compilato (comando "javac") o che sono comunque presenti in questa stessa dir . Se lo omettiamo potremmo non poter eseguire i programmi: la JVM non trova i file.class nella dir corrente perché li cerca altrove.
 
Spessissimo, avremo bisogno di accedere alle classi contenute nei packages del JDK.
Nel JDK la sun fornisce una copiosa quantità di packages disponibili all'uso.
 
Alcuni package di base delle librerie standard java :
*<tt>java.lang</tt> è il package che contiene le classi di base del linguaggio
*<tt>java.util</tt> raccoglie classi d’utilità generale
*<tt>java.io</tt> contiene le classi per programmare l’input-output
*<tt>java.awt</tt> contiene classi per programmare interfacce grafiche
*<tt>java.net</tt> contiene classi per programmare connessioni
*<tt>java.applet</tt> contiene classi per programmare ''applet''
 
== Note ==