Le basi del linguaggio Java A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android © Istituto Italiano Edizioni Atlas Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una macchina astratta, detta Java Virtual Machine (JVM). Per essere eseguito su una macchina reale, il codice compilato (bytecode) deve essere interpretato. Compilazione e interpretazione Java è un linguaggio interpretato, anche se la produzione del bytecode è effettuata con un’operazione di compilazione. Ambiente di programmazione con JDK (Java Development Kit) si possono scrivere e compilare applet e applicazioni Java. il compilatore e l’interprete sono eseguiti da riga di comando. software di tipo IDE (Integrated Development Environment), cioè ambienti che facilitano lo sviluppo dei programmi attraverso un’interfaccia grafica e una modalità di programmazione visuale. librerie contenenti classi e metodi Struttura di un programma Java un’applicazione può essere costituita da una o più classi. una si differenzia dalle altre perchè contiene il metodo main(). l’esecuzione di un’applicazione Java comincia eseguendo questo metodo. Struttura di un programma Java class <nome classe> { public static void main(String args[]) { // dichiarazioni di variabili . . . // istruzioni . . . } } Metodo main public indica che il metodo è pubblico ed è visibile void indica che non ci sono valori di ritorno static indica che il metodo è associato alla classe e non può essere richiamato dai singoli oggetti della classe. Compilazione ed esecuzione Per compilare il programma: javac <nome file> genera un file compilato che ha estensione .class e rappresenta il bytecode. Per eseguire il programma: java <nome file> Identificatori e parole chiave Gli identificatori sono i nomi che il programmatore assegna per identificare le variabili, i metodi e le classi. Le parole chiave sono un insieme di parole riservate di Java che non possono essere usate come identificatori. Variabili Le variabili: <tipo> <nome variabile>; int prezzo; L’assegnamento: <tipo> <nome variabile> = <valore iniziale>; double altezza = 1.83; Costanti Una costante può assumere un solo valore durante tutta l’esecuzione del programma: final double YARD_METRO = 0.914; Il casting Il casting è il meccanismo che consente al programmatore di indicare la conversione da un tipo di dato a un altro tipo. floatNum = 13.278f; intNum = (int) floatNum; Operatori Le operazioni aritmetiche: +, -, *, /. L’operatore % è usato per calcolare il resto. Operatori di incremento e di decremento: ++ e – –. i++; L’assegnamento di un valore a una variabile viene eseguito usando l’operatore di assegnamento =. Le stringhe possono essere concatenate tra loro usando l’operatore di concatenazione +. Operatori di confronto Operatori di confronto: l’operatore di uguaglianza è rappresentato da due simboli di uguale (==). if (voto == 6) { System.out.println("sufficiente"); } La disuguaglianza (diverso da) è espressa usando l’operatore !=. Gli altri operatori di confronto sono <, <=, >, e >=. Operatori booleani L’operatore && (oppure &) indica l’operazione di AND. L’operatore || (oppure |) indica l’operazione di OR. La negazione NOT viene espressa con l’operatore !. Standard output System.out.println("messaggio da visualizzare"); System.out rappresenta un oggetto associato allo standard output. Esiste anche un oggetto associato allo standard error che è System.err. Standard input System.in gestisce il flusso di dati inseriti da tastiera. classe BufferedReader InputStreamReader input = new InputStreamReader(System.in); BufferedReader tastiera = new BufferedReader(input); lettura di una stringa: String nome; nome = tastiera.readLine(); Struttura di sequenza La struttura di sequenza viene realizzata posizionando le istruzioni una di seguito all’altra e separandole con il punto e virgola. Ogni dichiarazione e istruzione deve terminare con il punto e virgola. Struttura di selezione La struttura di selezione: if (condizione) { // istruzioni eseguite se la condizione è vera } else { // istruzioni eseguite se la condizione è falsa } Selezione multipla La struttura di selezione multipla: switch (espressione) { case valore1: // istruzioni break; case valore2: // istruzioni break; . . . . default: // istruzioni break; } Struttura di ripetizione while while (condizione) { // istruzioni } Struttura di ripetizione • do while do { // istruzioni } while (condizione); • for for (inizializzazione; condizione; aggiornamento) { // istruzioni } Array Ci sono array a una dimensione (vettori) o a più dimensioni (matrici). Si usa un unico nome collettivo. Ogni elemento è individuato attraverso un indice (numero intero). Il primo elemento dell’array ha come indice 0. Array La dichiarazione: int i[]; String nomi[]; L’allocazione di un array: i = new int[5]; nomi = new String[10]; Array La dichiarazione e allocazione degli array sulla stessa riga: int i[] = new int[5]; String nomi[] = new String[10]; Array L’array bidimensionale corrisponde a una matrice con righe e colonne. int matrice[][]; matrice = new int[3][4] Eccezioni Un’eccezione è una situazione anomala che si verifica durante l’esecuzione del programma. try { // istruzioni da controllare } catch(eccezione) { // operazioni da eseguire se si verifica l'eccezione } Eccezioni predefinite ArithmeticException: segnala errori aritmetici NullPointerException: errore dovuto all’utilizzo di un riferimento che possiede il valore null IndexOutOfBoundException: errore nell’indice di un array IOException: generico errore di input/output.