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