Le command line di Java Esercitazioni di Programmazione 2 Novella Brugnolli brugnoll@science.unitn.it 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 compilatore e tool - docs documentazione delle librerie Java in formato html - lib file di libreria - src file sorgenti delle librerie - jre Java RuntimeEnvironments - demo - include 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 System.out.println(msg); void stampa(){ 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 System.out.println(msg); void stampa(){ 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 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 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 javac verbose sourcepath src d classes src/messaggio.java javac d classes classpath classes src/saluto.java javac d classes sourcepath src src/saluto.java Path dei file sorgenti necessari Directory di destinazione dei file bytecode Nome del file da compilare Ha bisogno di Conoscere la Classe Messaggio! 26 Febbraio 2003 19 Interprete Java Linux: /usr/local/jbuilder7/jdk1.3.1/bin/java Win 2000: C:\jdk1.3.1_04\bin\java 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: java classpath classes Saluto 26 Febbraio 2003 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