Le command line di Java
Esercitazioni di Programmazione 2
Novella Brugnolli
[email protected]
Ambiente di lavoro
Per compilare ed eseguire un programma Java
abbiamo bisogno di:
?The JavaTM 2 Platform, Standard Edition
?Installate il Software Develoment Kit (SDK) dal sito
http://java.sun.com/j2se
?Settate correttamente la variabile PATH del vostro
ambiente di lavoro
?Un editor di testo (emacs, NotePad, …)
26 Febbraio 2003
2
1
Java Software Development Kit (JDK)
Java Software Development Kit (SDK),
albero delle directory:
- bin
- docs
- lib
-
src
jre
demo
include
compilatore e tool
documentazione delle librerie Java
in formato html
file di libreria
file sorgenti delle librerie
Java Runtime Environments
26 Febbraio 2003
3
Configurazione della variabile di ambiente
PATH - 1
Linux, che shell state usando?
- tcsh, nel file .tcsrc
set path=(/usr/local/JBuilder7/jdk1.3.1/bin
$path)
-
bash, nel file .bashrc
PATH=/usr/local/JBuilder7/jdk1.3.1/bin:$path
export PATH
26 Febbraio 2003
4
2
Configurazione della variabile di ambiente
PATH - 2
Windows 2000
Control Panel
System
Advanced
Environment Variables
User Variables
Aggiungere
variabile path
value C:\jdk1.3.1_04\bin
26 Febbraio 2003
5
Scrittura di un’applicazione Java
Un APPLICAZIONE JAVA è un
programma stand-alone scritto in
linguaggio Java
26 Febbraio 2003
6
3
Scrittura di un’applicazione Java
Creazione di un file sorgente.
Un file sorgente è un file di testo, scritto in linguaggio Java.
26 Febbraio 2003
7
Compilazione di un’applicazione Java
Compilazione del file sorgente in un file bytecode.
Il compilatore java, javac, traduce il testo contenuto nel file sorgente in istruzioni
comprensibili alla Java Virtual Machine (Java VM) e le scrive in un file bytecode.
26 Febbraio 2003
8
4
Esecuzione di un’applicazione Java
Esecuzione del programma.
La Java VM è implementata da un interprete Java, java. Traduce le
istruzioni bytecode (indipendenti dalla piattaforma) in istruzioni comprensibili
dal vostro computer e le esegue.
26 Febbraio 2003
9
Portabilità del bytecode Java
“write once, run anywhere”
26 Febbraio 2003
10
5
Scrittura di un file sorgente
Scriviamo un primo semplice programma Java:
?In Java ogni metodo (funzione) ed ogni
variabile esiste solo all’interno di una classe
o di un oggetto (istanza di una classe).
?Java non supporta metodi o variabili globali.
?Lo scheletro di ogni programma Java è la
definizione di una classe.
26 Febbraio 2003
11
Classe Messaggio
public class Messaggio{
public class Messaggio{
String msg = “Il mio primo “ +
String msg = “Il “programma
mio primo “Java”;
+
“programma Java”;
public void stampa(){
public
void stampa(){
System.out.println(msg);
}
System.out.println(msg);
}
}
}
26 Febbraio 2003
12
6
Classe Messaggio
Messaggio.java
public class Messaggio{
public class Messaggio{
String msg = “Il mio primo “ +
String msg = “Il “programma
mio primo “Java”;
+
Messaggio(){} “programma Java”;
public void stampa(){
public
void stampa(){
System.out.println(msg);
}
System.out.println(msg);
}
}
}
26 Febbraio 2003
13
Il metodo main
?Il punto di entrata dell’esecuzione di un
programma Java è il metodo main: quando
un interprete java esegue un applicazione,
chiama il metodo main della classe sulla
quale è stato invocato
public static void main(String[] args)
26 Febbraio 2003
14
7
Classe Saluto
Saluto.java
public class Saluto{
Saluto(){
Messaggio m = new Messaggio();
m.stampa();
}
public static void main(String a[]){
Saluto s = new Saluto();
}
}
26 Febbraio 2003
15
Gestione dei file sorgente (.java) e
bytecode (.class)
Gerarchia di directory:
26 Febbraio 2003
16
8
Compilatore Java
javac
?Linux:
/usr/local/JBuilder7/jdk1.3.1/bin/javac
?Win2000:
C:\jdk1.3.1_04\bin\javac
?Compilazione della classe Messaggio:
javac Messaggio.java
?Sintassi:
javac [opzioni] file_sorgente
26 Febbraio 2003
17
Opzioni di javac
?-classpath <classpath>
Specifica dove sono i file bytecode (.class)
?-sourcepath <sourcepath>
Specifica dove sono i file sorgente (.java)
?-d <directory>
Specifica in quale directory salvare i bytecode prodotti
?-verbose
Stampa informazioni aggiuntive durante la compilazione
?-deprecation
Avverte se sono stati usati metodi deprecati
26 Febbraio 2003
18
9
Esempio
Path dei file sorgenti necessari
?javac –verbose
Directory di destinazione
–sourcepath src
dei file bytecode
–d classes
src/Messaggio.java Nome del file da compilare
?javac –d classes –classpath classes
src/Saluto.java
Ha bisogno di
Conoscere la
?javac –d classes –sourcepath src
Classe Messaggio !
src/Saluto.java
26 Febbraio 2003
19
Interprete Java
?Linux:
/usr/local/JBuilder7/jdk1.3.1/bin/java
? Win 2000:
java
C:\jdk1.3.1_04\bin\java
? Sintassi:
java [opzioni] classe [argomenti]
(opzioni: -classpath –verbose –version –help)
NB: la classe classe deve aver definito il metodo main:
public static void main(String[] argomenti)
? Esempio:
26 Febbraio 2003
java –classpath classes Saluto
20
10
Passaggio degli argomenti
?Sono delle stringhe passate al programma in fase di
esecuzione tramite la riga di comando, dopo il nome
del file. Vengono passati automaticamente come
parametri al metodo main:
public class Hello {
public static void main (String[] args){
System.out.println(“Hello “+args[0]+”!”);
}
>java Hello Novella
}
Hello Novella!
26 Febbraio 2003
21
>
Ed ora...
?Scegliere un OS: Linux o Windows 2000
?Scrivere, compilare ed eseguire l’esempio
appena visto (classi Messaggio e Saluto)
?Cambiare OS e rieseguire il programma
(senza ricompilarlo)
?Ripetere l’esercizio invertendo l’ordine
?Scrivere, compilare ed eseguire l’esempio
guida visto a lezione: la classe Pila
26 Febbraio 2003
22
11
Control Flow Statements
Statement Type
Keyword
looping:
while, do-while , for
decision making: if-else, switch-case
Documentazione API:
http://java.sun.com/j2se/1.3/docs/api/
Classe String:
http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html
Classe StringBuffer:
http://java.sun.com/j2se/1.3/docs/api/java/lang/StringBuffer.html
26 Febbraio 2003
23
Costrutto iterativo while
public class WhileDemo {
public static void main(String[] args) {
String copyFromMe = "Copy this string until you " +
"encounter the letter 'g'.";
StringBuffer copyToMe = new StringBuffer();
int i = 0;
char c = copyFromMe.charAt(i);
while (c != 'g') {
copyToMe.append(c);
c = copyFromMe.charAt(++i);
}
System.out.println(copyToMe);
}
}
26 Febbraio 2003
24
12
Costrutto iterativo do, while
public class DoWhileDemo {
public static void main(String[] args) {
String copyFromMe = "Copy this string until you " +
"encounter the letter 'g'.";
StringBuffer copyToMe = new StringBuffer();
int i = 0; char c = copyFromMe.charAt(i);
do {
copyToMe.append(c);
c = copyFromMe.charAt(++i);
} while (c != 'g');
System.out.println(copyToMe);
}
26 Febbraio 2003
}
25
Costrutto iterativo for
public class ForDemo {
public static void main(String[] args) {
int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076};
for ( int i = 0; i < arrayOfInts.length; i++) {
System.out.print(arrayOfInts[i] + " ");
}
System.out.println();
}
}
26 Febbraio 2003
26
13
Costrutto condizionale switch, case
public class SwitchDemo {
public static void main(String[] args) {
int month = 8;
switch (month) {
case 1: System.out.println("January"); break;
case 2: System.out.println("February"); break;
…
case 12: System.out.println(“December"); break;
default: System.out.println(“not valid”);
}
}
26 Febbraio 2003
}
27
Costrutto condizionale if, else
public class IfElseDemo {
public static void main(String[] args) {
int testscore = 76;
char grade;
if (testscore >= 90) { grade = 'A'; }
else if (testscore >= 80) { grade = 'B'; }
else if (testscore >= 70) { grade = 'C'; }
else if (testscore >= 60) { grade = 'D'; }
else { grade = 'F'; }
System.out.println("Grade = " + grade);
}
}
26 Febbraio 2003
28
14