Il linguaggio JAVA Linguaggio orientato agli oggetti, con caratteristiche simili ai linguaggi C e C++. Progettato per essere semplice, portabile su piattaforme hardware e sistemi operativi diversi. Permette di sviluppare – programmi stand-alone detti applications (ad esempio il browser Hot Java) – applets, programmi pensati per essere integrati nelle pagine HTML scaricati da World Wide Web eseguiti da un browser Web sulla macchina cliente Sviluppato da Sun Microsystems all’inizio degli anni ’90. Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 1 JAVA Caratteristiche principali di Java Indipendenza dalla piattaforma capacità di “muoversi” da un calcolatore ad un altro in modo semplice. Nel codice sorgente – dati primitivi sono definiti con dimensioni consistenti su tutte le piattaforme – librerie (classi) per le funzioni di base Nel codice binario – Bytecodes, codifica “intermedia” tra codice sorgente e codice eseguibile, interpretata sulla macchina client Programma orientato agli oggetti Organizzazione del software Programmazione modulare Riutilizzo del codice Semplicità Rinuncia ai puntatori Stringhe ed array sono oggetti Gestione della memoria automatica Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 2 JAVA Creazione di una applicazione Java L’applicazione più classica (e inutile?) del mondo class HelloWorld { public static void main (String args[]) { System.out.println("Hello World!"); } } 1. Memorizzare l’applicazione nel file testo HelloWorld.java 2. Compilare il file sorgente: javac HelloWorld.java Si ottiene il file HelloWorld.class (bytecode) 3. Eseguire l’applicazione java HelloWorld Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 3 JAVA Creazione di una applet Java La applet più classica (e inutile?) del mondo import java.awt.Graphics; public class HelloWorldApplet extends java.applet.Applet { public void paint (Graphics g) { g.drawString("Hello World!", 5, 25); } } 1. Memorizzare l’applicazione nel file testo HelloWorldApplet.java 2. Compilare il file sorgente: javac HelloWorldApplet.java Si ottiene il file HelloWorldApplet.class (bytecode) Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 4 JAVA Creazione di una applet Java 3. Inserire la applet in una pagina HTML <HTML> <HEAD> <TITLE>Hello to Everyone!</TITLE> </HEAD><BODY> <P>My applet says: <APPLET CODE="HelloWorldApplet.class" WIDTH=150 HEIGHT=25></APPLET> </BODY> </HTML> 4. Visualizzare la applet mediante – browser che supporti Java – appletviewer del JDK (Java Development Kit). Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 5 JAVA Programmazione ad oggetti in Java Un programma Java è costituito da un insieme di classi Una classe Java è caratterizzata da – attributi, che ne caratterizzano l’aspetto, lo stato, le qualità variabili di istanza descrivono gli attributi specifici di ogni singolo oggetto variabili di classe descrivono gli attributi associati alla classe ed a tutti i suoi oggetti – metodi, funzioni che ne descrivono il comportamento possono essere definite solo all’interno di una classe metodi di classe e di istanza La libreria di classi è un insieme di classi “elementari” che forniscono oggetti e comportamenti “minimi” necessari allo sviluppo di applicazioni (supporto per tipi di dati, per accesso alla rete, per la grafica). Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 6 JAVA Esempio: creazione di una classe /* motorcycle class */ class Motorcycle { String make; String color; boolean engineState; public static void main (String args[]) { Motorcycle m = new Motorcycle(); m.make = "Yamaha RZ350"; m.color = "yellow"; System.out.println("Calling showAtts..."); m.showAtts(); System.out.println("--------"); System.out.println("Starting engine..."); m.startEngine(); System.out.println("--------"); System.out.println("Calling showAtts..."); m.showAtts(); System.out.println("--------"); System.out.println("Starting engine..."); m.startEngine(); } // variabili di istanza void showAtts() { // metodo System.out.println("This motorcycle is a " + color + " " + make); if (engineState == true) System.out.println("The engine is on."); else System.out.println("The engine is off."); } void startEngine() { if (engineState == true) System.out.println("The engine is already on."); else { engineState = true; System.out.println("The engine is now on."); } } } Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 7 JAVA Programmazione ad oggetti in Java Ereditarietà: ogni classe eredita le caratteristiche (metodi e attributi) della sua superclasse. esiste solo l’ereditarietà singola la classe a livello gerarchico più alto è la classe Object Subclassing: ogni classe definita come sottoclasse di una classe eredita tutte le sue caratteristiche è necessario definire solo le differenze rispetto alle sue superclassi se la superclasse non è indicata, è implicitamente Object Interfaccia: insieme di metodi, privi di una definizione specifica, la cui implementazione è definita all’interno delle classi permettono di implementare l’ereditarietà multipla Package: permettono di raggruppare classi ed interfacce. librerie di classe del JDK nel package java per far riferimento ad una classe in un package si usa la notazione puntata Esempio: java.awt.color Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 8 JAVA Esempio: creazione di una gerarchia tra classi Data la classe Motocicletta, si vuole definire la classe Automobile. – Invece di copiare parte dei comportamenti che sono comuni a Motocicletta, si crea una superclasse Veicolo – Si suddivide la classe Veicolo in Veicoli A Propulsione Umana e Veicoli A Propulsione Meccanica – Si suddivide la classe Veicoli A Propulsione Meccanica in Due Ruote e Quattro Ruote A quale classe si associa l’attributo Colore? Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 9 JAVA Meccanismo dell’ereditarietà Creazione di un oggetto (istanza di una classe) creazione di un “template”, di un insieme di variabili che comprende quelle definite nella classe corrente e quelle definite in tutte le superclassi di tale classe. Il nuovo oggetto ha accesso a tutti i metodi della sua classe e di tutte le sue superclassi. Quando un metodo è invocato scelto dinamicamente, a partire dalla classe cui l’oggetto appartiene, risalendo attraverso tutte le sue superclassi. Un metodo può essere “ridefinito” (overriding) creazione di un metodo con le stesse “caratteristiche” (signature, cioè nome, tipo e numero degli argomenti) di un metodo già esistente in una superclasse, ma con funzionalità diverse nasconde il metodo della superclasse Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 10 JAVA Creazione di una sottoclasse Le applet sono sottoclassi della classe Applet ereditano automaticamente i metodi caratteristici della classe Applet (gestione del mouse, della tastiera, delle finestre . . . ) La classe Applet fa parte del package java.applet. L’unico package automaticamente disponibile è java.lang tutti gli altri devono essere esplicitamente importati import java.awt.Graphics; import java.awt.Font; import java.awt.Color; public class HelloAgainApplet extends java.applet.Applet { Font f = new Font("Times Roman", Font.BOLD,36); public void paint (Graphics g) { g.setFont(f); g.setColor(Color.red); g.drawString("Hello World!", 5, 25); } } Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 11 JAVA Istruzioni Le istruzioni sono i costrutti elemantari del linguaggio. Terminano sempre con un ’;’ Esempi: int i=1; import jawa.awt.Font; System.out.println("Questa motocicletta e‘ una " + marca + " " + colore); m.engineState = true; Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 12 JAVA Variabili Sono caratterizzati da un nome, un tipo ed un valore Variabili – di istanza definiscono un attributo di un oggetto – di classe caratterizzano tutte le istanze della classe – locali, dichiarate e utilizzate nella definizione di metodi esistono solo durante l’esecuzione del metodo Non esistono variabili globali Devono sempre essere dichiarate prima di essere utilizzate I nomi – devono iniziare con lettere, ’ ’, ’$’ (non con numeri) – possono poi comprendere lettere, numeri, simboli Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 13 JAVA Tipo delle variabili Otto tipi primitivi (non sono oggetti): byte (8), short (16), int (32), long (64) float (32), double (64) conformi allo standard IEEE 754 char (16) set di caratteri Unicode char rappresentato su 16 bit boolean le variabili booleane non sono numeri Nome di una classe Array Non esiste il costrutto typedef per definire un tipo si definisce una classe Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 14 JAVA Dichiarazione di variabili Costituita da tipo e nome di variabili Le variabili locali devono essere inizializzate prima di essere lette Le variabili di istanza e di classe hanno un valore iniziale predefinito – istanze di classe: null – variabili numeriche: 0 – caratteri: ‘0’ – variabili booleane: false Esempi: int x,y,z; int miaEta; String mioNome; boolean sono_stanco; boolean sei_brutto = true; int x, y, z = 0; Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 15 JAVA Costrutti elementari L’operatore di assegnazione è ’=’ Commenti – su più linee – su una sola linea /* */ // Letterali: interi: reali: booleani: caratteri: stringhe: 4, -4, 8L, 0074, 0xFA 5.6674, 2.56f, 3.4F, 10e45, .36E-2 true, false ’a’, ’%’, n, t, b, r, f, , ’, ", ddd, xdd, udddd "Ciao, io sono una stringa", "", "Stringa t allineata", "Javau2122" Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 16 JAVA Espressioni ed operatori operatori aritmetici: assegnazioni: operatori di confronto: operatori logici: operatori sui bit: operatori su stringhe: + x=y=0 == && & &= + x=x+2 != || | |= * / x+=y x-=y > < ! = % x*=y x/=y <= >= << >> x++ ++x x-- --x >>> <<= >>= >>>= L’operatore di concatenazione tra stringhe converte automaticamente qualunque operando in un oggetto stringa. – gli oggetti sono convertiti invocando il metodo toString() Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 17 JAVA Precedenza degli operatori Le parentesi modificano la precedenza. . [] () ++ -- ! instanceof new (type)expression * / % << >> >>> < > == != & | && || ? : = += -= *= /= %= &= |= <<= >>= >>>= Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 18 JAVA Oggetti Gli oggetti sono creati come istanze di una classe precedentemente definita. Per creare un oggetto si usa il costrutto new String str = new String(); Random r = new Random(); Motorcycle m = new Motorcycle(); La chiamata new 1. crea una nuova istanza dell’oggetto 2. alloca la memoria necessaria a tale oggetto 3. chiama un metodo denominato costruttore L’allocazione (e la disallocazione) della memoria relativa ad un oggetto sono automatiche: la new alloca la memoria necessaria per l’oggetto in heap la disallocazione avviene mediante un meccanismo di garbage collection: quando un oggetto non ha più nessun riferimento verso di se, la memoria corrispondente è disallocata Le parentesi sono obbligatorie. Eventuali argomenti sono usati per assegnare un valore iniziale all’istanza. Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 19 JAVA Metodo costruttore Il costruttore è un metodo speciale che inizializza una istanza di una classe: inizializza le variabili dell’oggetto crea eventuali altri oggetti necessari esegue tutte le operazioni necessarie alla “vita” dell’oggetto Più costruttori possono essere specificati per una classe, ciascuno con numero e tipo di argomenti diverso. import java.util.Date; class CreateDates { public static void main (String args[]) { Date d1, d2, d3; Date 1: Wed Feb 19 16:39:06 CET 2003 Date 2: Wed Sep 01 07:30:00 CEST 1971 Date 3: Wed Oct 16 17::05:00 CET 1996 d1 = new Date(); System.out.println("Date 1: " + d1); d2 = new Date(71, 8, 1, 7, 30); System.out.println("Date 2: " + d2); d3 = new Date("October 16 1996 5:05 PM"); System.out.println("Date 3: " + d3); } } Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 20 JAVA Variabili di istanza Per accedere a una variabile, si utilizza la notazione “puntata” myObject.var myObject.var.state Per assegnare un valore ad una variabile: myObject.var.state = true; Esempio: la classe Point. import java.awt.Point; class TestPoint { public static void main (String args[]) { Point thePoint = new Point(10,10); System.out.println("X is " + thePoint.x); System.out.println("Y is " + thePoint.y); System.out.println("Setting X to 5."); thePoint.x = 5; System.out.println("Setting y to 15."); thePoint.y = 15; System.out.println("X is " + thePoint.x); System.out.println("Y is " + thePoint.y); } } Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 21 JAVA Variabili di classe Sono variabili associate alla classe nel suo insieme, non alle istanze. Tutte le istanze possono accedere alle variabili di classe, ma non ne possiedono una copia Per definire una variabile di classe, si usa la parola chiave static. class MembrodiFamiglia { static string cognome = "Bettini"; String nome; int eta; } Per accedere a una variabile di classe, si utilizza la notazione “puntata” come per le variabili di istanza. È possibile utilizzare – il nome della classe (caldamente suggerito) – il nome di una variabile di istanza (caldamente sconsigliato) MembrodiFamiglia papa = new MembrodiFamiglia(); System.out.println("Il cognome della famiglia e‘: " + papa.cognome); System.out.println("Il cognome della famiglia e‘: " + MembrodiFamiglia.cognome); Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 22 JAVA Metodi Per invocare un metodo si usa la notazione puntata il nome del metodo deve essere seguito da () anche se non ha argomenti è possibile annidare chiamate a metodi insieme a riferimenti a variabili mioOggetto.metodoUno (Arg1, arg2, arg3); mioOggetto.metodosenzaarg (); mioOggetto.getClass().getName(); mioOggetto.var.metodoDue(arg1, arg2); La chiamata System.out.println() è un ottimo esempio di chiamata annidata che coinvolge metodi e variabili. System è una classe appartenente al package java.lang che descrive comportamenti specifici del sistema. System.out è una variabile di classe che contiene una istanza della classe PrintStream che punta all’uscita standard del sistema. Le istanze della classe PrintStream contengono un metodo println() che stampa oggetti stringa sull’uscita. Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 23 JAVA Esempio: metodi della classe String class TestString { public static void main (String args[]) { String str = "Now is the winter of our discontent"; System.out.println("The string is: " + str); System.out.println("Length of this string: " +str.length()); System.out.println("The character at position 5: " + str.charAt(5)); System.out.println("The substring from positions 11 to 18: " + str.substring(11,18)); System.out.println("The index of the character d: " +str.indexOf(’d’)); System.out.println("The index of the beginning of the substring \"winter\": " + str.indexOf("winter")); System.out.println("The string in upper case: " + str.toUpperCase()); } } The string is: Now is the winter of our discontent Length of this string : 35 The character at position 5: s The substring from positions 11 to 18: winter The index of the character d: 25 The index of the beginning of the substring ”winter”: 11 The string in upper case: NOW IS THE WINTER OF OUR DISCONTENT Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 24 JAVA Metodi di classe Sono metodi specifici di una classe, non di una istanza. Per chiamare un metodo di classe si può usare il nome della classe oppure di una variabile di istanza. String s, s2; s = "pippo"; s2 = s.valueOf(5); s2 = String.valueOf(5); // assegno ad s2 la stringa 5 // assegno ad s2 la stringa 5 valueOf() è un metodo della classe String, che converte un oggetto in stringa e lo ritorna in un oggetto di tipo stringa. Non opera direttamente su una istanza dell’oggetto stringa. La classe Math, definita nel package java.lang contiene un insieme di metodi di classe che realizzano le funzioni matematiche. Non esistono istanze della classe Math. Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 25 JAVA “Riferimento” ad oggetti L’assegnazione di oggetti a variabili ed il passaggio di oggetti come parametri di metodi avviene sempre per riferimento. Non esiste aritmetica dei puntatori in Java. Esempio import java.awt.Point; class ReferenceTest { public static void main (String args[]) { Point pt1, pt2; pt1 = new Point(100,100); System.out.println("pt1.x = " + pt1.x + " and pt1.y = " + pt1.y); pt2 = pt1; pt1.x = 200; pt1.y = 200; System.out.println("pt2.x = " + pt2.x + " and pt2.y = " + pt2.y); } } Dopo le ultime due assegnazioni, anche pt2 contiene i valori 200, 200. Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 26 JAVA Conversioni di tipo (cast) Il cast è il meccanismo utilizzato per convertire tipi. Il risultato del cast è un nuovo oggetto (o valore); l’oggetto originario non è modificato. Esistono tre tipi di cast: tra tipi primitivi – il tipo boolean non può essere convertito in nessun altro – è necessario specificare esplicitamente il cast solo per conversioni a tipi più “piccoli” (tipo) valore (int) (x/y); tra oggetti – ammesso solo se esiste relazione di ereditarietà – è necessario specificare esplicitamente il cast solo per conversioni a tipi più “grandi” MelaVerde melav; Mela mela; melav = new MelaVerde(); mela = melav; melav = (MelaVerde) mela; Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 27 JAVA Conversioni di tipo (cast) tra oggetti e tipi primitivi – classi speciali corrispondenti ai tipi primitivi, contenute nel package java.lang consentono la creazione di oggetti corrispondenti a valori – metodi nelle classi speciali consentono la conversione di oggetti nei corrispondenti valori Integer oggettoIntero = new Integer(35); int unIntero = oggettoIntero.intValue(); Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 28 JAVA Operatori di confronto tra oggetti Gli operatori di confronto operano solo tra tipi primitivi. Le uniche eccezioni sono gli operatori == e !=. verificano se i due operandi fanno riferimento allo stesso oggetto Per altri tipi di confronto è necessario realizzare metodi specifici. Java non permette l’operator overloading! Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 29 JAVA Esempio class EqualsTest { public static void main (String args[]) { String str1, str2; str1 = "she sells sea shells by the sea shore."; str2 = str1; System.out.println("String1: " + str1); System.out.println("String2: " + str2); System.out.println("Same object? " + (str1 == str2)); String1: she sells sea shells by the sea shore. String2: she sells sea shells by the sea shore. Same object? true String1: she sells sea shells by the sea shore. String2: she sells sea shells by the sea shore. Same object? false Same value? true str2 = new String(str1); System.out.println("String1: " + str1); System.out.println("String2: " + str2); System.out.println("Same object? " + (str1 == str2)); System.out.println("Same value? " + str1.equals(str2)); } } Assegnando la stessa espressione letterale a str1 e a str2, Java avrebbe riconosciuto le due stringhe come un unico oggetto e assegnato alle due variabili lo stesso oggetto. Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 30 JAVA Operazioni con oggetti Per copiare due oggetti: metodo clone(): crea una nuova istanza della stessa classe dell’istanza che lo chiama, copiando i valori delle variabili. Ritorna un oggetto della classe Object; si deve effettuare un cast alla classe originale. Point pt1, pt2, pt3; pt1 = new Point (0,0); pt2 = new Point (100, 100); pt3 = (Point) pt2.clone(); Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 31 JAVA Operazioni con oggetti Per determinare la classe di un oggetto: String name = obj.getClass().getName(); Il metodo getClass(), definito nella classe Object, restituisce un oggetto della classe Class che possiede un metodo getName(). Il metodo getName() ritorna una stringa che rappresenta il nome della classe dell’oggetto. L’operatore instanceof ha come operandi un oggetto ed il nome di una classe. Ritorna un valore booleano (true se l’oggetto è un oggetto della classe specificata, false altrimenti). pt instanceof String Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 32 JAVA Le classi di libreria: java class libraries Sono le classi sicuramente presenti in qualunque JDK (Java Development Kit). Package java.lang Descrizione Classi attinenti il linguaggio. Classi di uso generale. Classi di I/O, gestione file e stream. Supporto alla rete. Abstract Window Toolkit per la gestione delle interfacce grafiche. java.applet Classi che gestiscono le applet. java.util java.io java.net java.awt Object, String, System, Integer Float, Character Date, Vector, Hashtable. Socket, URL. Window, Menu, Button Font, CheckBox, Image Applet, AudioClip. Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 33 JAVA Istruzioni complesse Blocchi di istruzioni: sono insiemi di istruzioni elementari racchiuse tra . È possibile dichiarare variabili (locali) all’interno dei blocchi. Istruzioni condizionali (come nel linguaggio C). if (condizione) blocco istruzioni; else blocco istruzioni; Il test sulla condizione torna un valore booleano, non un intero. Operatore condizionale: è un operatore ternario (come nel linguaggio C); è una espressione che ritorna un valore. int smaller = x < y ? x : y; È l’operatore a più bassa priorità (escludendo l’assegnazione). Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 34 JAVA Istruzione switch Corrisponde ad una serie di if annidati (come nel linguaggio C). switch (test) { case primo_valore: istruzioni; break; case secondo_valore: istruzioni; break; .... default: istruzioni; break; } Il test può essere effettuato solo su tipi primitivi (che sia possibile ridurre a int con un cast), non su oggetti. L’unica relazione controllabile è quella di uguaglianza. I break sono necessari per delimitare il blocco di istruzioni da eseguire. Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 35 JAVA Istruzioni di ciclo for (inizializzazione; controllo; incremento) { istruz1; istruz2; ... } nella parte di inizializzazione è possibile dichiarare variabili locali al ciclo while (condizione) { istruz1; istruz2; ... } do { istruz1; istruz2; ... } while (condizione); Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 36 JAVA Istruzioni Break e Continue Le parole chiave break e continue permettono di uscire dal ciclo se si verificano condizioni “anomale” all’interno del corpo del ciclo. Con break si termina il ciclo direttamente while (count < array1.length) { if (array1[count] == 0) break; array2[count] = array1[count]; count++; } Con continue si salta all’inizio della prossima iterazione del loop while (count < array1.length) { if (array1[count] == 0) { count++; continue; } array2[count2++] = array1[count++]; } Si può specificare un’etichetta dopo le istruzioni break e continue si esce dal ciclo e si salta all’istruzione successiva all’etichetta Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 37 JAVA Array Gli array permettono di memorizzare una lista di elementi. Gli elementi di un array devono essere tutti dello stesso tipo. Possono essere sia tipi primitivi che oggetti. Gli array in Java sono oggetti. Creazione di un array: 1. Dichiarazione di una variabile che contiene l’array: String paroleDifficili[]; Point puntidelPerimetro[]; int[] tempi; 2. Creazione dell’oggetto array: con new (inizializza a 0, false, ’0’, null) String[] nomi = new String[10]; con inizializzazione diretta: String[] peperoncini = {"jalapeno", "anaheim", "thai"}; Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 38 JAVA Array Accesso ai singoli elementi mediante indice indice parte da 0 nomi[10] = "Luca"; intarray[0] = 15; Java verifica che gli indici non superino gli estremi dell’array – durante la compilazione (se l’indice è costante) – a tempo di esecuzione l’interprete Java riconosce l’errore e genera un’eccezione È possibile controllare la lunghezza di un array per evitare di uscire dai limiti int len = nomi.length; // Ottengo 11 Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 39 JAVA Array Un array di oggetti è un array di “puntatori” agli oggetti. quando si assegna un valore ad un elemento dell’array si crea un puntatore all’oggetto Gli array multidimensionali non sono supportati esplicitamente è possibile dichiarare array di array int[][] coords = new int[12][12]; coords[0][0] = 1; coords[0][1] = 2; Elena Baralis, Andrea Bianco, Maurizio Munaf ò Politecnico di Torino INTRODUZIONE ALLA PROGRAMMAZIONE JAVA – 40 JAVA