1
|
2 |
3 |
4
Introduzione
Obiettivi:
Il Lettore al termine di questo capitolo deve essere in grado di
1. Saper definire il linguaggio di programmazione Java e le sue
caratteristiche. (unità 1.1)
2. Interagire con l’ambiente di sviluppo: il Java Development Kit.
(unità 1.2, 1.5, 1.6)
3. Saper digitare, compilare e mandare in esecuzione una semplice
applicazione. (unità 1.3, 1.4, 1.5, 1.6)
Unità didattica 1.1)
- Introduzione a Java (5w
) - Cosa è Java (what)
Java è un linguaggio di programmazione nato negli anni novanta, e
destinato a diventare in breve tempo, il linguaggio più utilizzato
in assoluto. Nato per puri scopi di ricerca in ambito universitario,
e non come in molti altri casi, per volere di una multinazionale per
conquistare nuove fette di mercato, Java si pone come un
"super-linguaggio" che supera i limiti e i difetti che hanno altri
linguaggi. La Sun Microsystems ha poi fatto in modo che dal
linguaggio, si sia poi evoluta una serie di famose tecnologie (J.S.P.,
Servlet, E.J.B., Jini, R.M.I., etc.) che si stanno diffondendo in
molti ambiti del mondo della programmazione. Con il termine "Java"
ci si riferisce sia al linguaggio, sia alla tecnologia che racchiude
tutte le tecnologie di cui sopra. In questo manuale ci limiteremo a
parlare del linguaggio.
- Breve storia di Java (who, where & when)
Nel 1992 nasce il linguaggio Oak (quercia) prodotto della Sun
Microsystems e realizzato da un gruppo di esperti e navigati
sviluppatori, che formavano il cosiddetto "Green Team", ed erano
capitanati da James Gosling, oggigiorno uno tra i più famosi e
stimati "guru informatici" del pianeta. Sembra che il nome Oak
derivi dal fatto che Gosling e i suoi colleghi, nel periodo in cui
svilupparono questo nuovo linguaggio, avessero avuto come unica
compagnia, quella di una quercia che si trovava proprio fuori la
finestra dell’ufficio in cui lavoravano
. In un primo momento la Sun decise di destinare questo nuovo
prodotto, alla creazione d’applicazioni complesse per piccoli
dispositivi elettronici. In particolare, sembrava che i campi
strategici da conquistare in quegli anni, fossero quello della
domotica e quello della TV via cavo. Ma, in realtà, i tempi non
erano ancora maturi per argomenti quali il "video on demand" e gli
"elettrodomestici intelligenti". Solo da pochissimi anni, infatti,
si iniziano a richiedere video tramite Internet o TV via cavo, ed
appartiene ancora ai sogni di molte casalinghe l’idea di avere un
"Robot" che svolga le faccende domestiche al loro posto
. Nel 1993, con l’esplosione di Internet (negli Stati Uniti), nasce
l’idea di trasmettere codice eseguibile attraverso pagine HTML. La
nascita delle C.G.I. (Common Gateway Interface) rivoluzionò il World
Wide Web.
Il mercato che sembrava più appetibile allora ben presto diventò
proprio Internet. Nel 1994 viene realizzato un browser che fu
chiamato per breve tempo "Web Runner" (dal film "Blade Runner", il
preferito di Gosling) e poi, in via definitiva, "HotJava".
Il 23 maggio del 1995 Oak è ribattezzato ufficialmente col nome
"Java". Il nome questa volta deriva dalla tipologia indonesiana di
caffè di cui ha abusato il Green Team durante il periodo di sviluppo
del linguaggio: per i nomi non hanno avuto molta fantasia! La
Netscape annuncia contemporaneamente la scelta di dotare il suo
celeberrimo browser della Java Virtual Machine (J.V.M.), la quale,
rende di fatto, Java un linguaggio multipiattaforma. Inoltre la Sun
Microsystems mette a disposizione gratuitamente il kit di sviluppo
J.D.K. (Java Development Kit) sul sito www.java.sun.com . Nel giro
di pochi mesi i download del J.D.K. 1.02a diventarono migliaia e
Java iniziò ad essere sulla bocca di tutti. La maggior parte della
pubblicità di cui usufruì Java nei primi tempi, era direttamente
dipendente dalla possibilità di scrivere piccole applicazioni in
rete, sicure, interattive ed indipendenti dalla piattaforma chiamate
"applet". Nei primi tempi sembrava che Java fosse il linguaggio
giusto per creare siti Web spettacolari, ma in realtà, Java era ed è
molto di più che un semplice strumento per rendere più piacevole
alla vista la navigazione. Oggigiorno abbiamo altri strumenti per
ottenere certi risultati con minor sforzo. Java è invece oggi un
potente linguaggio di programmazione che sta diventando sempre di
più la soluzione ideale ai problemi che accomunano aziende operanti
in settori diversi (banche, house, compagnie
d’assicurazioni) come la sicurezza. La Sun ha investito molto in
questi anni sul progetto Java ottenendo risultati straordinari.
- Perchè Java (why)
Nei mesi che precedettero la sua creazione, nel mondo informatico
circolavano statistiche alquanto inquietanti. In una di esse, si
calcolava che, in una prima release di un’applicazione scritta in C++
(all’epoca linguaggio leader indiscusso nella programmazione), fosse
presente un bug ogni cinquanta righe di codice. In un’altra si
affermava che per un ottanta per cento, la presenza di questi bug
era dovuta fondamentalmente a tre ragioni: scorretto uso
dell’aritmetica dei puntatori, abuso delle variabili globali e
conseguente utilizzo incotrollato del comando goto. Infatti, tramite
l’aritmetica dei puntatori, il programmatore ha a disposizione uno
strumento tanto potente quanto pericoloso e difficile da utilizzare.
Per quanto riguarda le variabili globali (ovvero le variabili che
essendo dichiarate all’interno del programma chiamante risultano
accessibili da qualsiasi funzione dell’applicazione in qualsiasi
momento), rappresentano per molti programmatori, una scorciatoia
troppo invitante per apportare modifiche al codice. Giacché, il
flusso di lavoro di un’applicazione non è sempre facilmente
prevedibile, per cercare di evitare che le variabili globali
assumano valori indesiderati, il programmatore avrà a disposizione
il "famigerato" comando goto, che permette di far saltare il
workflow dell’applicazione da una parte di codice ad un’altra, senza
tener conto più di tanto della logica implementativa.
Java è stato creato proprio per superare, a partire da queste ed
altre statistiche, i limiti che gli altri linguaggi hanno. Alcuni
dei punti fermi su cui si basò lo sviluppo del linguaggio, furono
l’eliminazione dell’aritmetica dei puntatori e del comando goto. In
generale si andò nella direzione di un linguaggio potente, moderno,
chiaro, ma soprattutto robusto e "funzionante". In molti punti
chiave del linguaggio è favorita la robustezza piuttosto che la
potenza, basti pensare all’assenza dell’aritmetica dei puntatori.
Gli sviluppatori che hanno realizzato a Java, hanno cercato di
realizzare il linguaggio preferito dai programmatori, arrichendolo
delle caratteristiche migliori degli altri linguaggi, e privandolo
delle peggiori e delle più pericolose.
- Caratteristiche di Java
Java ha alcune importanti caratteristiche che permetteranno a
chiunque di apprezzarne i vantaggi.
Sintassi: è simile a quella del C e del C++, e questo non può
far altro che facilitare la migrazione dei programmatori da due tra
i più importanti ed utilizzati linguaggi esistenti. Chi non ha
familiarità con questo tipo di sintassi può inizialmente sentirsi
disorientato e confuso, ma ne apprezzerà presto l’eleganza e la
praticità.
Gratuito: per scrivere applicazioni commerciali non bisogna
pagare licenze a nessuno. Sun ha sviluppato questo prodotto e lo ha
migliorato usufruendo anche dell’aiuto della comunità "open-source".
Robustezza: essa è derivante soprattutto da una gestione
delle eccezioni chiara e funzionale, e ad un meccanismo automatico
della gestione della memoria (Garbage Collection) che esonera il
programmatore dall’obbligo di dover deallocare memoria quando ce n’è
bisogno, punto tra i più delicati nella programmazione. Inoltre il
compilatore Java, è molto "severo". Il programmatore è infatti
costretto a risolvere tutte le situazioni "poco chiare", garantendo
al programma maggiori chance di corretto funzionamento.
Libreria e standardizzazione: Java possiede una enorme
libreria di classi standard che forniscono al programmatore la
possibilità di operare su funzioni comuni di sistema come la
gestione delle finestre, dei collegamenti in rete e
dell’input/output. Il pregio fondamentale di queste classi sta nel
fatto che rappresentano un’astrazione indipendente dalle piattaforme
per un’ampia gamma di interfacce di sistema comunemente utilizzate.
Inoltre se utilizziamo Java non avremo problemi di
standardizzazione, come per esempio, compilatori che compilano in
modo differente grazie alle specifiche dettate da Sun.
Indipendenza dall’architettura: grazie al concetto di
macchina virtuale ogni applicazione, una volta compilata, potrà
essere eseguita su di una qualsiasi piattaforma (per esempio un PC
con sistema operativo Windows o una workstation Unix). Questa è
sicuramente la caratteristica più importante di Java. Infatti, nel
caso in cui si debba implementare un programma destinato a diverse
piattaforme, non ci sarà la necessità di doverlo convertire
radicalmente a seconda della piattaforma. E’ evidente quindi che la
diffusione di Internet favorirà sempre di più la diffusione di Java.
Recentemente una statistica ha affermato che questo linguaggio
diventerà il più utilizzato in assoluto a livello mondiale nel 2003,
operando uno straordinario sorpasso al C++.
Java Virtual Machine: Ciò che rende possibile di fatto
l’indipendenza dalla piattaforma è la Java Virtual Machine, un che svolge un ruolo da interprete (ma non solo) per le
applicazioni Java. Più precisamente dopo aver scritto il nostro
programma Java, prima bisogna compilarlo (per i dettagli riguardante
l’ambiente e il processo di sviluppo, vi rimandiamo al paragrafo
successivo). Otterremo così, non direttamente un file eseguibile
(ovvero la traduzione in linguaggio macchina del file sorgente che
abbiamo scritto in Java), ma un file che contiene la traduzione del
nostro listato in un linguaggio molto vicino al linguaggio macchina
detto "byte code". Una volta ottenuto questo file dobbiamo
interpretarlo. A questo punto la J.V.M. interpreterà il byte code ed
il nostro programma andrà finalmente in esecuzione. Quindi, se
piattaforme diverse posseggono una Java Virtual Machine, ciò sarà
sufficiente per renderle potenziali esecutrici di byte code.
Infatti, da qualche anno a questa parte, i Web Browser più diffusi
implementano all’interno di essi una versione della J.V.M., capace
di mandare in esecuzione le applet Java. Ecco quindi svelato il
segreto dell’indipendenza della piattaforma. Si parla di "macchina
virtuale" perché in pratica questo è stato implementato per
simulare un. Si potrebbe affermare che il linguaggio
macchina sta ad un computer come il byte code sta ad una Java
Virtual Machine. Oltre che permettere l’indipendenza dalla
piattaforma, la J.V.M. permette a Java di essere un linguaggio
multithreaded (caratteristica di solito dei sistemi operativi),
ovvero capace di mandare in esecuzione più processi in maniera
parallella. Inoltre garantisce dei meccanismi di sicurezza molto
potenti, e la "supervisione" del codice da parte della Garbage
Collection
Orientato agli oggetti: Java ci fornisce infatti degli
strumenti che praticamente ci "obbligano" a programmare ad oggetti.
I paradigmi della programmazione ad oggetti (ereditarietà,
incapsulamento, polimorfismo) sono più facilmente apprezzabili e
comprensibili. Java è più chiaro e schematico che qualsiasi altro
linguaggio orientato agli oggetti. Sicuramente, chi impara Java,
potrà in un secondo momento accedere in modo più naturale alla
conoscenza di altri linguaggi orientati agli oggetti, giacché, avrà
di certo una mentalità più "orientata agli oggetti".
Semplice: in realtà relativamente a questo argomento bisogna
fare una precisazione. Java è un linguaggio molto complesso
considerandone la potenza e tenendo presente che ci obbliga ad
imparare la programmazione ad oggetti. Ma, in compenso, si possono
ottenere risultati insperati in un tempo relativamente breve.
Apprezzeremo sicuramente le semplificazioni che ci offre Java
durante questo corso. Abbiamo già accennato al fatto che non esiste
l’aritmetica dei puntatori grazie all’implementazione della Garbage
Collection. Provocatoriamente Bill Joy, vice-presidente della Sun
microsystems negli anni in cui Java è stato creato, propose come
nome sostitutivo di Oak il nome "C + + - -", a sottolineare che il
nuovo linguaggio voleva essere un nuovo C++, ma senza le sue
caratteristiche peggiori (o se vogliamo, senza le caratteristiche
più difficili da utilizzare e quindi pericolose).
Sicurezza: ovviamente, avendo la possibilità di scrivere
applicazioni interattive in rete, Java possiede anche delle
caratteristiche di sicurezza molto efficienti. Come c’insegna la
vita quotidiana nulla è certo al 100%. Esistono una serie di
problemi relativi alla sicurezza di Java che ricercatori
dell’Università di Princeton hanno scoperto e reso pubblici su
Internet. Ma di una cosa possiamo essere certi: la Sun sta dando
priorità assoluta proprio alla risoluzione di questi problemi.
Intanto, oggi come oggi, Java è semplicemente il linguaggio "più
sicuro" in circolazione.
Unità didattica 1.2)
- Ambiente di sviluppo
Per scrivere un programma Java, abbiamo bisogno, in primo luogo, di
un programma che ci permetta di scrivere del testo, ovvero di un
Text Editor (come ad esempio il Note Pad di Windows, l’Edit del Dos,
o il Vi di Unix). Abbiamo già accennato al fatto che Java è un
linguaggio che si può considerare sia compilato che interpretato.
Abbiamo quindi bisogno di un compilatore e di una Java Virtual
Machine capace di interpretare il byte code generato dalla
compilazione del codice Java. In questo corso utilizzeremo il famoso
Java Development Kit, scaricabile gratuitamente dal sito
www.java.sun.com con le relative note di installazione e
documentazione, che ci offre sia un compilatore, che un ambiente
interpretato per permetterci di lavorare in modo completo. Infatti
il J.D.K. implementa una suite di applicazioni, come un compilatore,
una J.V.M., un formattatore di documentazione, una J.V.M. per
interpretare applet e così via. Si possono scaricare diverse
versioni di questo. Nel periodo in cui è stato scritto
questo manuale (gennaio 2001), la versione più recente è la 1.3, ma,
per questo corso, potremmo usare anche una versione qualsiasi dalla
1.2 in poi.
Esistono anche ambienti di sviluppo visuali che integrano Text
Editor, compilatore, ed interprete come JBuilder della Borland,
Visual Cafè della Symantec, Visual Age for Java della IBM o Forte
for Java della stessa Sun. Ognuno di questi strumenti favorisce di
sicuro una velocità di sviluppo maggiore, ma per quanto riguarda il
periodo di apprendimento del linguaggio, è preferibile di certo
scrivere tutto il codice senza aiuti da parte di questi strumenti,
per non correre il rischio di non raggiungere una conoscenza "seria"
di Java. C’è capitato spesso di conoscere persone che programmavano
con questi strumenti da anni, senza avere chiari concetti di base
come la gestione dei reference. Quindi, abituiamoci da subito ad
avere a che fare con più finestre aperte contemporaneamente.
Infatti, dopo aver installato correttamente il J.D.K. e settato
opportunamente le eventuali variabili di ambiente (consultare la
note di installazione), scriveremo il nostro codice sorgente su di
un Text Editor, il Note Pad (blocco note) di Windows va benissimo.
Salveremo il nostro file con suffisso ".java" (attenzione: se
utilizziamo il Note Pad dobbiamo salvare il nostro file chiamandolo
nomeFile.java ed includendo il nome tra virgolette in questa maniera
"nomeFile.java"). Una volta ottenuto il nostro file Java dobbiamo
aprire una Prompt di Dos. A questo punto dobbiamo spostarci nella
cartella in cui è stato salvato il nostro file sorgente e compilarlo
tramite il comando "javac nomeFile.java". Se la compilazione ha
esito positivo verrà creato un file chiamato "nomeFile.class". In
questo file, come abbiamo già detto, ci sarà la traduzione in byte
code del file sorgente. A questo punto potrò mandare in esecuzione
il programma invocando l’interpretazione della Java Virtual Machine
tramite il comando "java nomeFile".
Unità didattica 1.3)
- Primo approccio al codice
Diamo subito uno sguardo alla classica applicazione "Hello World".
In questo modo inizieremo a familiarizzare con la sintassi e con
qualche concetto fondamentale come quello di classe e di metodo.
Vedremo anche come compilare e come mandare in esecuzione il nostro
mini programma che stamperà a video il famigerato messaggio "Hello
World!".
Ecco il listato:
1 class HelloWorld
2 {
3 public static void main(String args[])
4 {
5 System.out.println("Hello World!");
6 }
7 }
N.B. I numeri non fanno parte dell’applicazione ma ci saranno utili
per la sua analisi.
Unità didattica 1.4)
Analisi del programma "HelloWorld"
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!
Esercizio 1.a)
Digitare, salvare, compilare ed
eseguire il programma HelloWorld