Hello World

Riga 1:

class HelloWorld

Dichiarazione della classe HelloWorld. Come vedremo ogni programma Java utilizza il concetto fondamentale di classe, che sarà trattato in dettaglio nel prossimo capitolo. Tutti i listati Java fanno uso di classi: l’intero codice, a parte le importazioni di librerie e le dichiarazioni d’appartenenza ad un package, è sempre incapsulato all’interno di classi.

Questo programma deve essere salvato esattamente col nome della classe, prestando attenzione anche alle lettere maiuscole o minuscole. Questa condizione è necessaria per mandare in esecuzione il nostro programma.

 

Riga 2:

{

Questa parentesi graffa aperta (ottenuta tenendo premuto il tasto ALT e scrivendo 123 con i tasti numerici che si trovano sulla destra della vostra tastiera, e poi rilasciando l’ALT) indica l’inizio della classe HelloWorld, che si chiuderà alla riga 7 con una parentesi graffa chiusa. Il blocco di codice compreso da queste due parentesi definisce la classe HelloWorld.

 

Riga 3:

public static void main(String args[])

Questa riga è bene memorizzarla da subito, dato che essa deve essere definita in ogni applicazione Java. Trattasi della dichiarazione del metodo main. In Java, metodo è sinonimo di azione (i metodi saranno trattati in dettaglio più avanti) ed il metodo main definisce il punto di partenza dell’esecuzione di ogni programma. La prima istruzione che verrà quindi eseguita in fase di esecuzione, sarà quella che la J.V.M. troverà subito dopo l’apertura del blocco di codice che definisce questo metodo.

Ma oltre al nome "main" , la riga 3 contiene altre parole di cui studieremo in dettaglio il significato nei prossimi capitoli:

public   Modificatore del metodo. I modificatori sono utilizzati in Java come nel linguaggio umano sono utilizzati gli aggettivi. Se si antepone un modificatore alla dichiarazione di un

           elemento Java (un metodo, una variabile, una classe etc.) questo cambierà in qualche modo (a seconda del significato del modificatore) la sua funzionalità. In questo caso

           trattasi di uno specificatore d’accesso che rende di fatto il metodo accessibile anche al di fuori della classe in cui è stato definito.

 

static     Altro modificatore del metodo. La definizione di static è abbastanza complessa. Per ora accontentiamoci di sapere che è essenziale per la definizione del metodo main.

 

void     E’ il tipo di ritorno del metodo. Significa "vuoto" e quindi questo metodo non restituire nessun tipo di valore. Il main non deve mai avere un tipo di ritorno diverso da void.

 

main     Come abbiamo già detto, trattasi del nome del metodo (detto anche identificatore del metodo).

 

(String args[]) Alla destra dell’identificatore di un metodo, si definisce sempre una coppia di parentesi tonde che racchiude una lista di parametri (detti anche argomenti)

                    opzionalmente. Il metodo main, in ogni caso, vuole sempre come parametro un array di stringhe (agli array troveremo dedicato nel terzo modulo, un’intera unità

                    didattica). Notare che args è l’identificatore (nome) dell’array, e quindi è l’unica parola che può variare nella definizione del metodo main, anche se per        

                    convenzione si utilizza sempre args.

 

Riga 4:

{

 

Questa parentesi graffa indica l’inizio del metodo main, che si chiuderà alla riga 6 con una parentesi graffa chiusa. Il blocco di codice compreso da queste due parentesi definisce il metodo.

 

Riga 5:

System.out.println("Hello World!");

Questo comando, che come già detto verrà eseguito non appena avremo mandato in esecuzione il programma, stamperà a video la stringa "Hello World!". Anche in questo caso, giacché dovremmo introdurre argomenti per i quali il lettore non è ancora maturo, preferiamo rimandare la spiegazione dettagliata di questo comando ai prossimi capitoli. Per ora ci basterà sapere che stiamo chiamando un metodo appartenente alla libreria standard di Java che si chiama println, passandogli come parametro la stringa che dovrà essere stampata.

 

Riga 6:

}

Questa parentesi graffa chiusa (ottenuta tenendo premuto il tasto ALT e scrivendo 125 con i tasti numerici che si trovano sulla destra della vostra tastiera, e poi rilasciando l’ALT) chiude l’ultima che è stata aperta, ovvero chiude il blocco di codice che definisce il metodo main.

 

Riga 7:

}

Questa parentesi graffa invece chiude il blocco di codice che definisce la classe HelloWorld.

Unità didattica 1.5)

- Compilazione ed esecuzione del programma HelloWorld

Una volta riscritto il listato appena presentato sfruttando un Text Editor (supponiamo il Note Pad di Windows), dobbiamo salvare il nostro file in una cartella di lavoro, chiamata ad esempio "CorsoJava". Se si decide di utilizzare il Note Pad, il lettore presti attenzione al momento del salvataggio, ad includere il nome del file (che ricordiamo deve essere obbligatoriamente HelloWorld.java) tra virgolette in questo modo "HelloWorld.java". Tutto ciò si rende necessario, essendo Note Pad un editor di testo generico, e non un editor per Java, e quindi tende a salvare i file con il suffisso".txt".

A questo punto possiamo iniziare ad aprire una prompt di Dos ed a spostarci all’interno della nostra cartella di lavoro. Dopo essersi accertati che esista il file "HelloWorld.java" possiamo passare alla fase di compilazione. Se lanciamo il comando:

        javac HelloWorld.java

mandiamo il nostro file sorgente in input al compilatore che ci mette a disposizione il J.D.K.. Se al termine della compilazione non ci viene fornito nessun messaggio di errore, vuol dire che la compilazione ha avuto successo. A questo punto possiamo notare che nella nostra cartella di lavoro è stata creato un file di nome "HelloWorld.class". Questo è appunto il file sorgente tradotto in byte code, pronto per essere interpretato dalla J.V.M.: Se lanciamo il comando:

java HelloWorld

il nostro programma, se non sono lanciate eccezioni dalla J.V.M., dopo qualche attimo d’attesa relativo all’interpretazione del byte code compilato, verrà mandato in esecuzione stampando il tanto sospirato messaggio.

Unità didattica 1.6)

- Possibili problemi in fase di compilazione ed esecuzione

Di solito, nei primi tempi, gli aspiranti programmatori Java ricevono spesso dei messaggi misteriosi da parte del compilatore e dell’interprete Java.

Possibili messaggi di errore in fase di compilazione:

1)javac: Command not found

In questo caso non è il compilatore che ci sta segnalando un problema bensì, è lo stesso sistema operativo che non riconosce il comando "javac" che dovrebbe chiamare il compilatore del J.D.K.. Probabilmente quest’ultimo non è stato installato correttamente. Un tipico problema è di non aver settato la variabile d’ambiente path (consultare le note d’installazione).

 

2) HelloWorld. java: 6: Method printl( java.lang.String) not found in class java.io.PrintStream.

System.out.printl (" Hello World!");

                  ^

(J.D.K. fino alla versione 1.2)

oppure

HelloWorld.java:6: cannot resolve symbol

symbol : method printl (java.lang.String)

location: class java.io.PrintStream

System.out.printl(" Hello World!");

                  ^

(J.D.K. versione 1.3)

Se riceviamo questo messaggio, abbiamo semplicemente scritto "printl" in luogo di "println". Il compilatore non può da solo accorgersi che è stato semplicemente un errore di battitura, ed allora ci ha segnalato che il metodo printl non è stato trovato. In fase di debug, è sempre bene prendere coscienza dei messaggi di errore che ci fornisce il compilatore, tenendo ben presente però, che ci sono dei limiti a questi messaggi ed alla comprensione degli errori del compilatore stesso.

3) HelloWorld.java:6: ';' expected

System.out.println(" Hello World!")

                                                        ^

(qualsiasi versione del J.D.K.)

In questo caso il compilatore ha capito subito che abbiamo dimenticato un punto e virgola, immancabile conclusione di ogni statement (istruzione). Purtroppo, anche se stiamo parlando di una dei migliori compilatori in circolazione, non sarà sempre così preciso. In alcuni casi, se dimentichiamo un punto e virgola (oppure dimentichiamo di chiudere un blocco di codice con una parentesi graffa), il compilatore ci segnalerà l’esistenza di errori inesistenti in successive righe di codice.

 

2) HelloWorld.java:1: 'class' or 'interface' expected

Class Argomenti

^

(qualsiasi versione del J.D.K.)

In questo caso invece avremo scritto class con lettera maiuscola e quindi la J.V.M. ha richiesto esplicitamente una dichiarazione di classe (o di interfaccia, concetto che chiariremo più avanti). "Class" lo ripetiamo, non è la stessa cosa di "class" in Java.

 

Possibili messaggi relativi alla fase di interpretazione:

1) Exception in thread "main" java.lang.NoSuchMethodError: main

Se questo è il messaggio di risposta ad un tentativo di mandare in esecuzione un programma, forse abbiamo definito male il metodo main. Probabilmente abbiamo dimenticato di dichiararlo static o public, oppure abbiamo scritto male la lista degli argomenti (che deve essere String args[]), o magari non abbiamo chiamato "main" il metodo.

Altri classici motivi che potrebbero provocare questo messaggio, possono essere il dichiarare il nome del file con un nome diverso da quello della classe, o il dichiarare il metodo main in modo non corretto.

2) Exception in thread "main" java.lang.NoClassDefFoundError: Helloworld (wrong name

: HelloWorld)

at java.lang.ClassLoader.defineClass0(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:486)

at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:11

1)

at java.net.URLClassLoader.defineClass(URLClassLoader.java:248)

at java.net.URLClassLoader.access$100(URLClassLoader.java:56)

at java.net.URLClassLoader$1.run(URLClassLoader.java:195)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:188)

at java.lang.ClassLoader.loadClass(ClassLoader.java:297)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)

at java.lang.ClassLoader.loadClass(ClassLoader.java:253)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)

Non c’è da spaventarsi! Questo è semplicemente il caso in cui la J.V.M. non trova la classe Java contenente il byte code da interpretare. Infatti, come si può notare, è stato lanciato il comando "java Helloworld" invece di "java HelloWorld". Non sempre quindi messaggi lunghi richiedono radicali correzioni!

 

 



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Marcello
Ti è piaciuto l'articolo?