Java/Dal sorgente all'esecuzione: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
riscrivo parte, rendo più newb-friendly |
|||
Riga 38:
; Spiegazione del passo 1
Il testo del programma è chiamato ''codice sorgente'' e contiene le istruzioni che il programma dovrà eseguire
<source lang="Java">
public static void main(String[] args) {
</source>
In questo caso, il programma
Per scrivere il testo si usa un qualunque programma che permette di salvare i testi in formato *.txt.
; Spiegazione del passo 2
Il
Il testo prodotto dal compilatore si trova in alcuni file che hanno estensione <tt>.class</tt>. Questi sono leggibili solo dalla macchina virtuale.
; Spiegazione del passo 3
La macchina virtuale prende in ingresso il nome della classe da avviare, cerca il file *.class corrispondente, ed esegue la sequenza di istruzioni identificata dal main(). Ogni classe può avere un solo main(), quindi non ci sono ambiguità.<ref>Se
<source lang="Java">
public class PrimoProgramma {
public static void main(String[] args) {
System.out.println("Funziona!");
}
public static void main(String[] args) {
Syetem.out.println("Non funziona!");
}
}
</source>
</ref> Viceversa, se la classe non contiene il main(), la macchina virtuale si rifiuta di eseguire alcunché: ripetere i passi sopra usando questo codice sorgente, e vedere che succede.
<source lang="Java">
public class PrimoProgramma {
Line 62 ⟶ 74:
In molti IDE c'è un pulsante che lancia la macchina virtuale in automatico. Il pulsante, in genere, è chiamato ''Run''; alcuni offrono anche l'opzione ''Compile and Run''.
Se <tt>javac</tt> termina senza scrivere nulla su console, la compilazione è avvenuta con successo. Altrimenti,
In genere, il programmatore neofita può ignorare i messaggi di avviso. Invece, se ci sono errori, il testo sorgente viola le regole del linguaggio, quindi è necessario '''leggere i messaggi di errore''' (che spesso sono in inglese), correggere i file interessati, facendo attenzione anche agli errori di battitura e all'accoppiamento delle parentesi graffe, e riprovare a compilare finché la procedura non riesce. Si noti che uno stesso errore può far sì che il compilatore interpreti male il testo che segue, fino alla fine del file, generando messaggi di errore superflui.
''Se il prodotto del compilatore è eseguibile, perché devo lanciare la macchina virtuale? Non posso eseguirlo direttamente da terminale?''<br />
Dipende dal compilatore in uso. <tt>javac</tt> restituisce un formato che non è legato ad alcun sistema operativo, ed è appunto questo che rende Java portabile. L'altra faccia della medaglia è che il SO non riconosce direttamente il programma, quindi ci vuole un eseguibile a parte, che fa da intermediario tra il sistema operativo e il programma scritto in un formato di terze parti.<br />
Esistono compilatori - come [[w:gcc|gcc]] - che restituiscono un formato binario eseguibile direttamente sul sistema operativo in uso, cioè avviabile senza la macchina virtuale, ma in quel caso si perde la portabilità: i file prodotti sono inutilizzabili su un sistema differente.
''Perché devo compilare? La macchina virtuale non può leggere direttamente il codice sorgente?''
È una scelta di chi scrive la macchina virtuale. È possibile scrivere una macchina virtuale che esegua direttamente il codice sorgente, ma finora gli sviluppatori della Sun (e della Oracle) non l'hanno ritenuto necessario.
== Informazioni e consigli ==
|