Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Corso di base in
Programmazione Java
Luigi Santangelo
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 1
Obiettivo
- Il presente corso ha l'obiettivo di presentare i fondamenti di Java - E' un corso prevalentemente pratico, si consiglia pertanto di svolgere regolarmente gli esercizi - Cosa NON faremo: - Librerie Swing e Awt (interfaccia grafica) - Applet - J2EE - J3ME - Librerie specifiche (es. accesso alla base dati)
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 2
Esame
Alla fine del corso previsto (per chi vuole) lo svolgimento di un esame, il cui superamento comporta l'acquisizione di 2 CF. L'esame esclusivamente pratico. Al candidato verr richiesto lo sviluppo di un algoritmo simile a quelli che vedremo a lezione.
Risorse
In rete sono presenti tantissime risorse su Java: www.java.sun.com Java Italian Portal Mokabyte Mattone dopo mattone
- capitolo 1 -
Fasi di sviluppo
modello a cascata
Linguaggi di programmazione
A s s e m b ly la n g u a g e s
C
L IS P Logo S chem e
C++ Java
P y th o n
C#
1 9 4 0 1 9 5 0 1 9 6 0 1 9 7 0 1 9 8 0 1 9 9 0 2 0 0 0 M a c h in e code F o r tr a n B a s ic P ascal
S m a llta lk S m a llta lk 8 0
8
Strumenti di lavoro
Editor Il programmatore scrive il codice sorgente Compilatore Traduce il codice sorgente in un codice oggetto (specifico per la CPU) Inteprete Tradue il codice sorgente on the fly
Linker Converte uno o pi moduli in un programma eseguibile Debugger Esegue il programma in slow motion e aiuta a trovare eventuali bug
Strumenti di lavoro
Sul sito della Sun disponibile un'ottima documentazione navigabile. In essa troverete tutte le informazioni che cercate. Purtroppo solamente in inglese e contiene troppi dettagli che non vedremo. Impareremo a leggere la documentazione e a riconoscere solo ci che ci serve.
10
Strumenti di lavoro
Per sviluppare gli applicativi in Java sufficiente avere qualsiasi editor di testi di tipo ASCII. Per rendere pi semplice lo sviluppo, consigliato l'utilizzo di un ambiente di sviluppo integrato. Questo ci consente di scrivere codice, compilarlo, eseguire il debug ed eseguirlo. Ci agevola anche la scrittura del codice attraverso suggerimenti. Esistono vari ambienti di sviluppo, alcuni dei quali OpenSource (o comunque free): - Eclispe - Netbeans - Jbuilder - ...
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 11
Un compilatore Java converte codice sorgente Java in istruzioni per JVM. Queste istruzioni, chiamate bytecodes, sono le stesse per ogni architettura e per ogni sistema operativo. Un interprete, specifico per la CPU, interpreta il bytecode in una specifica architettura.
12
13
H e l lo . ja v a
H e l lo .c la s s
In t e r p r e t e r
H e llo , W o rld !
In t e r p r e t e r
14
Tipi di programmi
Console application Applet GUI application
Paradigmi di programmazione
Programmazione imperativa: Il codice viene inteso come una sequenza di istruzioni, dette anche direttive o comandi. Rientrano in questa categoria il linguaggio C, Basic, Fortan, Pascal, ... Programmazione funzionale: Il flusso di esecuzione di un programma assume la forma di una serie di funzioni. Rientrano in questa categoria il linguaggio LISP, Logo, Haskell, ...
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 17
Paradigmi di programmazione
Programmazione orientata agli oggetti: La programmazione orientata agli oggetti gestisce oggetti. Ogni oggetto ha una propria vita (viene creato, viene utilizzato e quindi viene distrutto). L'uso di un oggetto avviene attraverso i propri metodi. Ogni metodo pu cambiare lo stato dell'oggetto, spedire un messaggio all'oggetto, o creare un nuovo oggetto (figlio). Un oggetto, inoltre, di uno specifico tipo (classe). Pi oggetti possono far parte della medesima classe ed ereditare le medesime caratteristiche. Java un linguaggio OOP
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 18
- capitolo 2 -
Nozioni fondamentali
19
Il linguaggio
Il linguaggio Java composto da uno o pi file di testo, uno dei quali deve necessariamente contenere una classe public con un metodo main: public MiaClasse { public static void main (String args[]) { ... } } Ogni file deve avere lo stesso nome della classe ed estensione .java
20
Il linguaggio
Considerazioni: - Java case sensitive: distingue le maiuscole dalle minuscole; - Un programma Java vive all'interno di una classe il cui nome deve essere uguale al nome del file e deve inizare con una lettera; - non c' limite alla lunghezza del nome della classe; - Per convenzione il nome della classe inizia con la lettera maiuscola; - Se non sono stati commessi errori sintattici, compilando la classe si ottiene un file .class che il bytecode
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 21
I commenti
Un commento una porzione di codice che verr ignorata durante la fase di compilazione del codice sorgente. Utilissimo per indicare al programmatore la semantica dell'algoritmo che sta realizzando. Un commento pu essere inserito con: // commento in singola linea /* commento su pi linee */
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 22
I commenti
Prendete l'abitudine di commentare i programmi. Partendo dai commenti presenti in un file, possibile, attraverso l'utility javadoc, creare automaticamente la documentazione (in formato html) per le classi create. A tale scopo, i commenti vanno inseriti prima della definizione di ogni classe, di ogni metodo e di ogni attributo.
23
Le variabili
Una variabile identifica una porzione di memoria RAM in grado di contenere una informazione semplice (tipi primitivi) o composta (oggetti). Il tipo di una varibile specifica la quantit di memoria deve essere riservata per mantenere quella informazione. Tipi primitivi: boolean byte short int long char float double
24
Assegnamento
Inizializzare una variabile significa assegnare alla variabile un valore iniziale (che pu essere modificato). La modifica di una variabile avviene attraverso l'operatore di assegnamento (=) int a = 6; In questa istruzione abbiamo dichiarazione e inizializzazione; a = 8; In questa istruzione assegnamo 8 alla variabile a
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 25
Tipi primitivi
boolean char byte short int long float double true o false carattere UNICODE a 16 bit intero di 8 bit [-/+127] intero di 16 bit [-/+32768] intero di 32 bit [+/-2.147.483.648] intero di 64 bit [-/+ 10^19] decimale di 32 bit [+/-3,4*10^38] con 7 cifre significative decimale di 64 bit [+/-3,4*10^308] con 15 cifre significative
Casting
Il cast un processo di conversione (automatico o manuale) di una variabile da un tipo a un altro tipo. Ad esempio, un intero pu essere convertito in un float o in un double, o un intero in una stringa. Alcuni cast avvengono automaticamente, mentre in altre circostanze necessario indicarlo esplicitamente: int a = 5; double b = a; // b vale 5.0 String s = a + ; // s vale 5 char c = 'a'; int d = c; // d = 97 ascii di 'a'
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 28
Casting
Alcuni cast sono lossless (senza perdita di dati). Ad esempio se convertiamo un intero in un double non c' perdita di dati, ma se convertiamo un double in intero, la parte decimale viene persa: double d = 3.14; int i = (int) d; // i vale 3 Di seguito vengono indicati i cast lossless
byte short int char long double
29
Cast
int a = 17; int b = 5; System.out.print(a / b); // essendo a e b due interi, la divisione ritorna un intero (ovvero 3); double c = (double) a / (double) b; // c un numero reale
30
Nome variabile
Una variabile si pu chiamare come si vuole purche: - non abbia come nome una parola riservata; - sia composta solo da lettere, cifre, _ e $ - non inizi con una cifra; Attenzione: Java case sensitive int Totale = 100; int totale = 100;
31
Parole riservate
abstract boolean break byte byvalue case cast catch char class const continue default do double else extends false final finally float for future generic goto if implements import inner instanceof interface long native new null operator outer package private protected public rest return short static super switch synchronized this throw throws transient try var void volatile while int true
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 32
Esempio 01
public class ex01 { public static void main (String args[]) { boolean flag = true; char ch = 'B'; int n = 22; float x = 3.14159F; } } Le variabili di tipo primitivo di definiscono, gli oggetti si istanziano (operatore new, lo vedremo pi avanti).
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 33
Esempio 01
public class ex01 { public static void main (String args[]) { boolean flag = true; char ch = 'B'; int n = 22; float x = 3.14159F; System.out.print(flag); } }
34
Caratteri speciali
\b \t \n \r \ \' \\
backspace tabulazione avanzamento riga ritorno carrello virgolette doppie virgoletta singola barra rovesciata
35
Operatori
Gli operatori in java di distinguono in operatori di: assegnamento: relazionali: aritmetici: logici: incremento decremento = < <= == >= > != + - * / % && || ! ++ --
36
Operatori logici
(condiz1 && condiz2) vera se e solo se entrambe le condizioni sono vere. Se la prima falsa, la seconda non viene verificata (corto-circuitata) (condiz1 || condiz2) vera se almeno una delle due condizioni vera. Se la prima vera, la seconda non viene verificata. (corto-circuito) (!condiz1) vera solo se condiz1 falsa.
37
Esempio 02
public class ex02 { public static void main (String args[]) { int a = 10; int b = 5; int diff = a b; int mod; mod = a % b; System.out.print(diff); System.out.print(mod); } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia
38
Esempio 03
public class ex03 { public static void main (String args[]) { int a = 10; int resto = a % 2; if (resto == 0) { System.out.print(Numero pari\n); } else { System.out.print(Numero dispari\n); } } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 40
Errori comuni
Extra semicolon: Missing braces:
if (...) statement1; statement2; ... if (...) if (...) statement1; else statement2; ...
41
Esempio 04
public class ex04 { public static void main (String args[]) { char carattere = 'a'; switch (carattere) { case 'a': System.out.print(Carattere A);
break;
case 'z': System.out.print(Carattere Z);
break;
default: System.out.print(Non definito); } } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 43
Cicli iterativi
In Java esistono 3 modi per poter eseguire i cicli iterativi: for, while e do ... while I metodo pi semplice il ciclo for con il quale viene indicata la sequenza di istruzioni che devono essere iterate e il numero di volte in cui l'iterazione dovr avvenire. Questo avviene indicando il limite inferiore, il limite superiore di iterazioni e la lunghezza del passo.
44
Esempio 05
public class ex05 { public static void main (String args[]) { for (int i = 0; i < 10; i = i+1) { System.out.print(Iterazione n. + i); System.out.print(\n); } } }
45
Cicli iterativi
Talvolta, per, non possibile determinare il numero di iterazioni da fare. Ad esempio, si potrebbe pensare di eseguire un ciclo fintanto che una variabile non assuma il valore 100. In questo caso non sappiamo quando la variabile assuma tale valore. In questo caso preferibile utilizzare i costrutti while e do ... while. La differenza fondamentale sta nel fatto che il ciclo while pu essere eseguito zero volte (se la variabile assume gi il valore 100), mentre il do ... while, viene comunque eseguito una volta. Cio il controllo della condizione avviene DOPO aver eseguito il ciclo.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 46
Esempio 06
public class ex06 { public static void main (String args[]) { int a = 100; while ((a % 2) == 0) a = a / 2; System.out.print(Valore di a: ); System.out.print(a + \n); } }
47
Esempio 07
public class ex07 { public static void main (String args[]) { float a = 75F; do a = a / 2; while ((a % 2) == 0); System.out.print("Valore di a: "); System.out.print(a + "\n"); // a vale 37.5 } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 48
Metodi
Come abbiamo gi detto, un programma java composto da almeno una classe che contiene un metodo chiamato main. In realt, questa classe potrebbe contenere diversi metodi (o funzioni) che possono essere richiamati da qualsiasi altro metodo. Un metodo prende in input zero, uno o pi parametri (INPUT) e ritorna zero o un parametro (OUTPUT). Bisogna per distinguere la definizione del metodo dalla chiamata al metodo. Un metodo che non ritorna nulla, ritorna void. Il valore di ritorno viene ritornato tramite return. Un metodo pu avere diversi return.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 49
Esempio 08
public class ex08 { public static void main (String args[]) { if (pari(5)) System.out.print(numero pari); else System.out.print(numero dispari); } private static boolean pari(int a) { if ((a % 2) == 0) return true; return false; } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 50
Visibilit (scope)
Ogni variabile che viene definita in un programma Java ha una sua visibilit (scope). Se si cerca di utilizzare una variabile fuore dal suo scope, il compilatore segnala un errore. Le parentesi graffe possono essere utilizzate per capire qual lo scope: public void funzione() { int miavar = 10; .... } // qui finisce la visibilit della variabile
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 51
Visibilit (scope)
Le variabili possono definite dentro un metodo vengono distrutte quando il metodo stato eseguito (quindi lo spazio di memoria viene liberato). private double radius; ... public void function (...) { double radius = 5; ... // le due variabili sono distinte
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 52
Esercizi
1. public static int daysInMonth(int month, int year) // precondizione: 0 < n < 13 // esempio: daysInMonth(2, 2000) ritorna 29 2. public static int numberOfDigits(int n) // esempio: numberOfDigits(1478) ritorna 4 3. public static int sumOfDigits(int n) // esempio: sumOfDigits(1478) ritorna 20 4*. public static int reverseInteger(int n) // esempio: reverseInteger(1234) ritorna 4321
53
Pseudocodice e Flowcharts
Pseudocodice: sequenze di asserzioni in una specifica notazione (non legato ad alcun linguaggio di programmazione) FlowCharts (diagrammi di flusso): rappresentazione grafica del flusso
55
Esempio: 12 + 22 + ... + n2
Pseudocodice: Input: n sum = 0 i = 1 Ripeti fintanto che i <= n sq = i * i sum = sum + sq i = i + 1 Output: sum
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 56
Esempio: 12 + 22 + ... + n2
n sum 0 i1 No in? Yes sq i * i sum sum + sq ii+1 Input / output Processing step Decision
sum
57
Esempio: 12 + 22 + ... + n2
public static void main(String args[]) { int n, sum, i; n = 10; sum = 0; for (i = 1; i <= n; ++i) { int sq = i * i; sum = sum + sq; } System.out.print(sum); }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 58
- capitolo 3 -
Gli oggetti
59
Gli oggetti
Java un linguaggio di programmazione orientato agli oggetti. Offre infatti una suite di librerie di oggetti dei quali possibile utilizzare i relativi metodi. Un oggetto rappresenta una istanza di una classe, una entit fisicamente presente in memoria RAM. Preso un oggetto, possibile modificare le propriet attraverso i metodi Le propriet di un oggetto possono essere altri oggetti o variabili di un certo tipo. Attraverso i metodi (funzioni) si possono modificare le propriet degli oggetti.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 60
Gli oggetti
Affinch un oggetto possa esistere, necessario istanziare tale oggetto partendo dalla sua classe. Per cui per avere l'oggetto bisogna avere la classe. Per istanziare un oggetto si utilizza l'operatore new che alloca lo spazio di memoria sufficiente a memorizzare l'oggetto. Object myObj = new Object(); I metodi di un oggetto possono essere invocati nel seguente modo: res = myObj.myMethod(parameter);
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 61
Oggetti
Java mette a disposizione una miriade di oggetti che possono essere istanziati e successivamente utilizzati. Fornisce anche i costrutti affinch possano essere costruiti oggetti nuovi attraverso la definizione della classe a cui gli oggetti appartengono. Tra tutti gli oggetti presenti nelle librerie, ne vedremo solo alcuni. Innanzitutto l'oggetto String. Finora abbiamo lavorato solo con tipi primitivi (int, char, float, ecc) ma non abbiamo parlato di stringhe, in quanto queste in Java sono oggetti.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 62
L'oggetto String
Una stringa una sequenza di caratteri. La classe String contiene pi di 50 metodi. Nel seguito vedremo i pi significativi. Per prima cosa necessario creare l'oggetto di istanza String, quindi successivamene utilizzare i metodi che la classe ci mette a disposizione. Gli esempi che verranno indicati nel seguito ometteranno (per questione di leggibilit) la definizione della classe principale e del metodo main.
63
Esempio 09
// creazione dell'oggetto String saluto = new String(Ciao); // ritorna 4, la lunghezza della stringa int len = saluto.lenght(); // visualizza la sottostringa ia System.out.print(saluto.substring(1,3)); // visualizza la stringa in maiuscolo System.out.print(saluto.toUpperCase()); // concatenazione System.out.print(Mario + + Rossi);
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 64
Esempio 09
// visualizza la stringa in minuscolo System.out.print(saluto.toLowerCase()); // ritorna il carattere 'C' char c = saluto.charAt(0); // verifica se String a = new String b = new boolean uguali le due stringhe sono uguali String(Ciao); String(Hello); = a.equals(b);
65
L'oggetto String
L'oggetto String un oggetto un po' particolare. Per tutti gli oggetti, infatti, la creazione si effettua attraverso l'operatore new (come visto finora). Un oggetto String pu essere creato anche nel seguente modo: String s = Pippo; che equivale a String s = new String(Pippo); Consiglio: abituatevi a scriverlo nel secondo modo.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 66
L'oggetto String
Una stringa pu contenere anche caratteri speciali: \\ per visualizzare \ \n per visualizzare una new line \t per i tab
67
L'oggetto String
Un qualsiasi oggetto, e quindi anche un oggetto di classe String, pu, come abbiamo visto nella funzione equals, pu essere passato come parametro all'interno di una funzione (come avviene con i tipi primitivi) ma pu anche essere ritornato da un metodo. Ad esempio il metodo substring ritorna una stringa, sottostringa di quella passata come parametro: String s = new String(Pippo); String ss = s.substring(0,2); // o equiventemente String ss = new String(s.substring(0,2));
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 68
L'oggetto String
Altre funzioni sull'oggetto String: String s = new String(mia stringa); s.length(); // lunghezza di s
s.charAt(2); // terzo carattere s.substring(2, 5); // ritorna 5 caratteri a partire dal secondo s.compareTo(altra_stringa); // confronta le due stringhe
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 69
L'oggetto String
Altre funzioni sull'oggetto String: String s = new String(mia stringa); s.trim(); // elimina gli spazi
s.replace(vecchia, nuova); // sostituisce ogni occorenza di vecchia con nuova s.toUpperCase(); s.toLowerCase();
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 70
L'oggetto String
Conversione intero stringa e stinga intero int i = 5; String s = Integer.toString(i); System.out.print(s + 5); // visualizza 55; String s = new String(5); int i = Integer.parseInt(s); System.out.print(i + 5); // visualizza 10
71
Esercizi
1.Scriverelaprocedura: publicint[]contaLettereAlfabeto(StringfraseMoltoLunga); incuilavariabilefraseMoltoLungacontieneunastringaabbastanza lunga(adesempioiprimi10versidellaDivinaCommedia)eritorna unarraydi26elementi.L'iesimoelementodell'arraycontieneil numerodivolteincuilaiesimaletteradell'alfabetofiguranella stringa.Es: nelmezzodelcammindinostravita.... array[0]=3;//perch3sonoleoccorrenzedelcarattereA array[1]=0; //perchnoncisonooccorrenzedelcarattereb array[2]=1; //perchc'unasolaletterac ... array[25]=2;//perch2sonoleoccorrenzedellalettereaz
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 72
Esercizi
5. public static String intToBinary(int n) // esempio: intToBinary(123) ritorna 1111011 6. public static int numeroVocali(String s) // esempio: numeroVocali(pippo) ritorna 2 7. public static String inverti(String s) // esempio: inverti(pippo) ritorna oppip 8*. public static String cifrCesare(String s, int k) // esempio: cifrCesare(abc, 3) ritorna def; // per semplificare si considerino solo i testi minuscoli
73
- capitolo 4 -
74
Array
Un array un blocco di memoria che contiene valori dello stesso tipo (es tutti intero, tutte stringhe, ecc) Ogni locazione contiene un elemento
1.39 1.69 1.74 0.0
Un array di doubles
75
Array
Un array fisicamente una sola variabile anche se contiene diversi elementi. Ogni elemento dell'array viene acceduto attraverso un indice. In informatica gli indici iniziano sempre da zero.
1.39 1.69 1.74 0.0 c[0] c[1] c[2] c[3]
c il nome dell'array
76
Array
c il nome dell'array
77
Array
In Java, quando si crea un array necessario specificare a priori la dimensione di questo array. Questa dimensione NON pu essere modificata successivamente. Se si tenta di accedere a una locazione dell'array inesistente viene generato un'eccezione.
78
Array
Definizione di un array in Java: Type[] nomeArray = new Type[dimensione]; es. int[] nomeArray = new int[25];
79
Array
Perch sono necessari gli array? Supponiamo di avere 1000 variabili di tipo intere e vogliamo calcolare la somma. Scriviamo il codice sia con gli array che senza
int sum = 0; sum = sum + var0001; ... sum = sum + var1000; totale1001righe int n = 1000; int p = new int[n]; int sum = 0; for (int k=0; k<n; k=k+1) somma = somma+p[i]; totale5righe
80
Gli array
Un array pu essere visto come un oggetto e come tale possiede alcune propriet. Quella pi utilizzata la propriet lenght (non un metodo), che restituisce il numero di elementi di cui si compone l'array:
int a[] = new int[100]; System.out.print(a.lenght); Si fa notare come l'elemento passato al metodo main un array di Stringhe: public static void main(String args[])
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 81
Array
Unarray,comeunqualsiasialtrotipoprimitivo,puessere ritornatodaunmetodo.Es:
public static int[] mioMetodo(int a[]) { int nuovoarray[] = new int[a.length]; .... return nuovoarray; }
82
Esempio 10
// Dichiarazione di array: int arr1[] = new int[100]; String arr2[] = new String[25]; //accesso arr1[0] = arr1[1] = arr2[0] = arr2[1] = arr3[2] = all'array 101; 202; new String(Pippo); new String(Pluto); new String(Paperino);
83
Esempio 11
// Riempire un array di 100 elementi con i primi // 100 numeri interi final int MAX = 100; int array[] = new int[MAX]; for (int i = 0; i < MAX ; ++i) array[i] = i;
84
Input di dati
Si visto come con una semplice procedura possibile visualizzare a video il valore delle variabili: System.out.print(Messaggio); Purtroppo per l'input in Java una operazione abbastanza complessa in quanto bisogna utilizzare parecchie classi che sarebbe troppo prematuro vedere. Risulta pertanto pi semplice utilizzare una finestra di input:
JOptionPane.showInputDialog(messaggio);
85
Esempio 12
Import javax.swing.*; String nome = JOptionPane.showInputDialog(Il tuo nome); System.out.println(Il tuo nome: + nome); String anni = jOptionPane.showInputDialog(et); int age = Integer.parseInt(anni); System.exit(0);
86
Esercizi
9*.
// ritorna true se n[] ordinato 10. public static int minimo(int n[]) // ritorna l'elemento minimo dell'array 11. public static int media(int n[]) // ritorna la media 12. public static int[] reverse(int a[]) inverte l'ordine degli elementi dell'array
88
Esercizi
13. public static int[] concatena(int a[], int b[]) // ritorna un array contenente gli elementi di a e di b 14. public static int[] tally(String s) // ritorna un array contenente il numero di occorrenze // dei 26 caratteri dell'alfabeto presenti in s // per semplicit si trasformi s in minuscolo // NB: ricordarsi di gestire gli spazi e i caratteri speciali
89
- capitolo 5 -
Le classi
90
Terminologia
Classe: schema dettagliato in base al quale l'oggetto verr creato, definisce le caratteristiche dell'oggetto che appartiene alla classe Oggetto: istanza della classe, l'oggetto possiede la stessa struttura della classe. Rapprenta l'entit attiva Campi: propriet dell'istanza. L'insieme di tutti i campi rappresenta lo stato dell'oggetto Metodi: azioni che l'oggetto pu compiere. I metodi variano lo stato dell'oggetto.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 91
Terminologia
Classe: macchina Oggetto: ferrari
92
Terminologia
Incapsulamento: i campi di un oggetto sono accessibili SOLO all'oggetto stesso e non da altri oggetti (sia istanza della stessa classe che istanze di classi diverse). Attraverso l'incapsulamento, l'oggetto diventa una scatola nera e per interagire con l'oggetto si devono usare solo i metodi che l'oggetto mette a disposizione Ereditariet: una classe pu ereditare e successivamente estendere le propriet e i metodi di una classe padre
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia
93
Terminologia
Event-driven: Il programma simula la gestione asincrona degli eventi. Alcuni metodi possono essere invocati automaticamente in risposta ad alcuni eventi. Costruttori: metodi interni alla classe che consentono la creazione dell'oggetto. Devono essere sempre presenti e quando mancano viene utilizzato il costruttore di default. Il costruttore ha lo stesso nome della classe e viene invocato con new
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 94
Esempio 13
GragorianCalendar compleanno; compleanno = new GregorianCalendar(); // l'operatore new consente di invocare il // costruttore della classe Date. In questo modo // si possono utilizzare i metodi della classe // Date GregorianCalendar oggi; // Non stato creato alcun oggetto (nella RAM // non stato allocato alcuno spazio, per cui // non si possono utilizzare i metodi di Date) compleanno oggi
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 95
GregorianCalendar
Costruzione di classi
Fino a questo momento abbiamo utilizzato delle classi gi esistenti. Java fornisce un set di costrutti che consentono allo sviluppatore di realizzare nuove classi. La forma pi semplice per la definizione di una classe :
class nomeClasse { attributo1 attributoN costruttore1 costruttoreN metodo1 metodoN }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 96
Esempio 14
import java.util.GregorianCalendar; Class Impiegato { private String nome; private String cognome; private String matricola; private GregorianCalendar dataAssunzione; // Costruttore Impiegato(String n, String c, String m) { nome = n; cognome = c; matricola = m; } [...]
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 97
Esempio 14
[...] public String getNominativo() { return nome + + cognome; } public void setAssunzione(int g, int m, int a) { dataAssunzione = new GregoriaCalendar(a,m,g); } public GregorianCalendar() { return dataAssunzione; } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 98
Esempio 14
class esempio14 { public static void main(String args[]) { Impiegato i = new Impiegato(Mario, Rossi, A); Impiegato i2 = new Impiegato(Luca,Bianchi,B); Impiegato i3 = new Impiegato(Alice,Verdi,C); i.setAssunzione(25, 8, 2009); System.out.print(i2.getNominativo()); } }
99
Osservazioni
- Sono state create DUE classi: la prima (Impiegati) contiene solo la definizione della classe, ovvero gli attributi della classe, i costruttori e i metodi per accedere agli attributi; nella seconda invece si creano gli oggetti di classe Impiegati; - I metodi della classe Impiegati sono pubblici, gli attributi invece privati - Nella classe impiegati stato definito un costruttore (potrebbe essere omesso) - Nella classe impiegati non possono esserci due metodi aventi la stessa firma - Il nome del file della classe Impiegati DEVE essere Impiegati.java - Import della classe GregorianCalendar;
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 100
Esercizi
15. Creare una classe Impiegato in grado di memorizzare il nome, il cognome, la data di nascita (giorno, mese e anno) e lo stipendio annuo (double) di un generico dipendente. Creare almeno un metodo costruttore e i relativi metodi di set e di get degli attributi (i quali dovranno essere privati). Creare anche un metodo public void bonus(double aumento) che aggiunge allo stipendio annuo del dipendente, il bonus passato come parametro. Scrivere quindi un metodo main con il quale viene creato un array di 5 impiegati. Iterare quindi un ciclo in modo da aumentare, a ognuno dei dipendenti, il proprio stipendio del 5%. Infine stampare il nome, il cognome e lo stipendio annuo di ciascuno dipendente, ciascuno su una riga.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 101
Metodi privati
Come abbiamo visto, in una classe gli attributi sono definiti privati, mentre i metodi pubblici. In alcuni casi, per potrebbe essere necessario definire dei metodi accessibili solo all'interno della classe stessa (e quindi non dall'esterno). In questo caso il metodo pu essere definito privato: private String mioMetodo(int d) { ... }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 102
Un campo (attributo) si dice statico se tutte le istanze di una specifica classe (in cui si definisce il campo statico) condividono lo stesso campo. Di conseguenza, un valore settato in un campo statico, visibile a tutte le istanze di una classe. Lo scope degli attributi su tutta la classe. Un campo statico si definisce con static:
private static int contatore;
103
La classe Math fornisce moltissimi metodi statici, che possono, di conseguenza, essere utilizzati senza dover istanziare l'oggetto Math per invocarne i suoi metodi:
106
Esempio 15
class Impiegato { [...] // campo visibile a tutte le istanze // di Impiegato private static int contatore = 0; // costruttore Impiegato([...]) { ++contatore; } public static int getContatore() { return contatore; } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 107
Esempio 15
108
Esercizi
16. Creare una classe CdMusicali in grado di memorizzare informazioni sui CD: artista e titolo del CD. Ogni CD deve essere identificato univocamente, cio ogni CD deve avere un proprio id (numerico) e tutti i CD devono condividere il successivo numero libero (se ho gi creato 4 CD il numero successivo deve essere 5). Costruire i relativi metodi di get e di set. NON costruire il metodo set dell'attributo ID. NON costruire n il metodo SET n il GET del successivo numero libero ma creare un metodo statico che ritorna il numero successivo libero. Infine creare un metodo main che crea 7 CD. Ogni qualvolta viene creato un CD, come id viene assegnato il successivo numero libero, e quest'ultimo deve essere incrementato di 1. Assegnare nome dell'artista e titolo a piacere. Quindi visualizzare i 7 CD.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 109
Overload di metodi
In Java possibile definire una classe contenente pi volte un metodo con lo stesso nome ma parametri differenti. Questo viene definito overload (sovraccarico) del metodo. public class foo { public void metodo() { ... } public void metodo(int par) { ... } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 110
Costruttori
Talvolta si ha necessit di inizializzare gli attributi di una classe ad alcuni valori di default. Il costruttore di una classe serve proprio a definire i valori che dovranno essere assegnati agli attributi della classe. Un costruttore pu anche non essere definito, ma non una buona tecnica di programmazione. Tuttavia, anche per i costruttori possibile eseguire l'overload, in questo modo una classe pu avere diversi metodi costruttori (ognuno di loro avr una firma differente).
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 111
Costruttori
1. Una classe pu avere pi di un costruttore 2. I costruttori devono avere il nome della classe 3. Sono sempre di tipo public 4. Non ritornano alcun tipo 5. Possono prendere parametri 6. Se ci sono pi costruttori, i parametri devono essere differenti; 7. Se non si definisce alcun costruttore, Java ne fornisce uno di default. 8. Un costruttore viene invocato con l'operatore new
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 112
Esempio 16
class Esempio16 { int param; String val; public Esempio16(int a, String s) { param = a; s = val; } public Esempio(int a) { this(a, ); } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 113
Esempio 16/bis
class Esempio16Bis { public static void main(String args[]) { String s; // s vale null s = new String(pippo); // s viene inizializzato e in questo momento // viene allocata la memoria } }
114
Esercizi
17. Creare una classe Employe composta da tre attributi: un id (di tipo intero), nome (di tipo Stringa) e salario (di tipo intero). Definire quindi un primo metodo costruttore che inizializza solo il nome e un secondo metodo costruttore che inizializza sia il nome che il salario. Nel primo metodo costruttore (quello che inizializza solo il nome), il salario dell'impiegato dovr essere inizializzato a -1. L'attributo id dovr essere un attributo statico e dovr essere incrementato ogni qualvolta viene creato un nuovo oggetto istanza della classe Employe. Per cui i metodi costruttori dovranno prevedere opportunamente l'incremento. Creare un metodo toString() che non prende nessun parametro e ritorna una stringa contenente il nome seguito da : seguito dal salario. Successivamente creare una seconda classe, chiamata e17, che contiene il metodo main dentro al quale viene definito un array di 5 elementi contenente 5 oggetti Employe (inserire nome e salario casuali), quindi visualizzare l'array.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 115
Package
Un package rappresenta un pacchetto di classi. Queste possono essere utilizzare all'interno di una qualsiasi altra classe, purch si specifica il nome del package. Ad esempio, la classe Date, fa parte del package java.util, per cui questo pacchetto dovr essere importato nella nostra classe attraverso la direttiva import: import java.util.*; class miaClasse { ... }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 116
Package
Esistono centinaia di package, quelli che seguono sono alcuni, quelli che verosimilmente vi troverete ad utilizzare nel prosieguo della vostra attivit di programmatori java: java.applet java.awt javax.swing java.net java.text java.math java.lang (applet per il web) (Abstract Window Toolkit) (GUI) (comunicazione in rete) (formattazione di testi) (funzioni matematiche) (package importato di default)
117
Incapsulamento
Gli attributi di una classe possono essere tipi primitivi, oppure oggetti istanza di una classe. Gli attributi dovrebbero essere sempre privati. Da una classe B deve essere possibile accedere agli attributi della classe A solo attraverso i metodi pubblici. Questo viene definito incapsulamento. Ad esempio, la classe Impiegati, tra i suoi attributi, pu avere un oggetto di classe GregorianCalendar. In questo caso questo oggetto incapsulato dentro la classe Impiegati.
118
Incapsulamento
Affinch l'incapsulamento possa essere realizzato, necessario che gli attributi siano privati. L'accesso agli attributi avviene attraverso i metodi pubblici di tipo get e set.
119
Incapsulamento
public class MyClass { // Private fields: private <sometype> myField; ... // Constructors: public MyClass (...) { ... } Public interface: ... public // Public methods: constructors and public <sometype> myMethod (...) methods { ... } ... // Private methods: private <sometype> myMethod (...) { ... } ... }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 120
- capitolo 6 -
Ereditariet e Polimorfismo
121
Ereditariet
Supponiamo di aver gi creato una classe chiamata Impiegato, composta dai campi nominativo e stipendio. Se consideriamo i dirigenti, anch'essi sono sotto alcuni aspetti molto simili agli impiegati (hanno un nome e prendono uno stipendio). Ma possiedono qualcosa di pi, ad esempio un bonus in caso di raggiungimento degli obiettivi. Attraverso l'ereditariet possibile creare una classe Manager che eredit tutte le funzionalit della classe Impiegati e definisce quelle nuove. Class Manager extends Impiegati { ... }Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 122
Ereditariet
La classe Impiegati viene definita superclasse (o classe base, o classe genitore). La classe Manager viene definita sottoclasse (o classe derivata, o classe figlia). Le sottoclassi possiedono pertanto maggiori funzionalit delle superclassi. Tutti i metodi e gli attributi definiti nella superclasse vengono ereditati nella sottoclasse. NON vale il viceversa. possibile nella sottoclasse ridefinire (override) un metodo della superclasse. All'interno della sottoclasse possibile invocare un metodo della superclasse attraverso la parola chiave super.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 123
Esempio 17
class Impiegato { int stipendio; String nominativo; public Impigato(int s, String n) { stipendio = s; nominativo = n; } public int getStipendio() { return stipendio; } public String getNominativo() { return nominativo; } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 124
Esempio 17
class Manager extends Impiegato { int bonus; public Manager(int s, String n, int b) { super(s, n); bonus = b; } public int getStipendio() { // return stipendio + bonus; // ERRORE return super.getStipendio() + bonus; } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 125
Esempio 17
class Esempio17 { public static void main(String arg[]) { Impiegato i = new Impiegato(25000, pippo); Manager m = new Manager(35000, pluto, 15000); System.out.print(i.getNominativo() + ); System.out.println(i.getStipendio()); // ritorna 25000 System.out.print(m.getNominativo() + ); System.out.println(m.getStipendio()); // ritorna 50000 }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 126
Polimorfismo
Continuiamo con l'esempio di prima: Impiegati e Manager. Abbiamo detto che la classe Manager estende la classe Impiegato. Questo significa che un oggetto istanza della classe Manager anche istanza della classe Impiegato (anche nella vita pratica un manager pur sempre un impiegato). Il fatto che un oggetto pu essere istanza di due classi differenti viene definito polimorfismo. L'esempio seguente chiarir i dubbi:
127
Esempio 18
class Esempio18 { public static void main(String arg[]) { Impiegato dip[] = new Impiegato[4]; dip[0] dip[1] dip[2] dip[3] = = = = new new new new Impiegato(Carl, 15000); Manager(Tom, 35000, 12000); Impiegato(Bob, 22000); Manager(Harry, 29000, 15000);
Polimorfismo
Nell'istruzione seguente
System.out.println(dip[i].getSalario());
la VM invoca dinamicamente il metodo getSalario a seconda di chi sia dip[i], cio a seconda che dip [i] sia istanza di Impiegato o sia istanza di Manager. La selezione automatica del metodo appropriato durante l'esecuzione viene chiamata binding dinamico
129
Classi Astratte
Una classe si dice astratta quando contiene uno o pi metodi astratti. Un metodo astratto quando tale medoto viene solo definito e non implementato. Spetta alla classe che estende la classe astratta implementare i metodi astratti. Una classe astratta non pu mai essere istanziata, cio NON possibile creare un oggetto istanza di una classe astratta. ClasseAstratta a = new ClasseAstratta(); // impossibile
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 131
Esempio 19
132
Esempio 19
133
Esempio 19
class Impiegato extends Person { private double stipendio; public Impiegato(String n, double s) { super(n); stipendio = s; } public double getStipendio() { return stipendio; } public String getDescrizione() { return L'impiegato + super.getNome() + guadagna + stipendio + euro; } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 134
Esempio 19
class Studente extends Person { private String facolta; public Studente(String n, String f) { super(n); facolta = f; } public double getFacolta() { return facolta; } public String getDescrizione() { return Lo studente + super.getNome() + iscritto alla facolt di + facolta; } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 135
Esempio 19
Notare: stato creato un class Esempio19 { array di due elementi public static void main(String args[]) { Person people[] = new Person[2]; people[0] = new People(Pippo); //ERRORE // non si pu istanziare una classe astratta people[0] = new Impiegato(Pluto, 15000); people[1] = new Studente(Paperino, lettere); for (int i = 0; i < people.length; i++) { Person p = people[i]; System.out.println(p.getDescrizione()); } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 136
IMPORTANTE: per privilegiare l'incapsulamento dei dati necessario che gli attributi siano sembre privati e i metodi pubblici.
138
Suggerimenti
Quando si scrivono i programmi e si vuole utilizzare l'ereditariet, tenete presente questi suggerimenti: 1. Inserire le operazioni e i metodi comuni nella superclasse; 2. Non utilizzare campi protected; 3. Utilizzare l'ereditariet solo se tutti i metodi ereditati hanno senso;
139
L'operatore instanceof
Alcune volte pu essere necessario individuare la natura (intesa come classe) di un oggetto. L'operatore instanzeof pu essere utilizzato a tale scopo:
Person p[] = new Person[2]; p[0] = new Impiegato(...); p[1] = new Dirigente(...); for (int i = 0; i < p.length; ++i) { if (p[1] instanceof Impiegato) ... else .... }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 140
141
Quali sono i metodi che vengono forniti dalla classe Object? equals() : verifica se due oggetti uguali getClass(): ritorna il nome della classe di cui l'oggetto istanza Potrebbe essere necessario eseguire una sovrascrittura di questi metodi
142
Metodo equals()
Impiegato a = new Impiegato(pippo, 15000); Impiegato b = new Impiegato(pippo, 15000); if (a == b) system.out.print(identici); else system.out.print(differenti); Cosa verr stampato a video? Sebbene i due oggetti contengano le stesse informazioni, l'operatore di uguaglianza verifica solo se l'indirizzo di memoria uguale. Per cui, essendo due oggetti separati, avranno differente indirizzo di memoria e quindi differenti [...]
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 143
Metodo equals()
Quando si devono confrontare due oggetti, necessario ricorrere al metodo equals(). Poich ogni classe estende di default la classe Object, possiede gi un metodo equals il quale per verifica SOLO se il contenuto nella cella di memoria identico per cui, riferendoci all'esempio di prima, l'istruzione if (a.equals(b)) system.out.print(identici); else system.out.print(differenti); visualizzer sempre la parola differenti. Bisogna quindi sovrascrivere il metodo equals() nel modo seguente:
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 144
Metodo equals()
public boolean equals(Impiegato i) { if (this.getNome().equals(i.getNome)) && this.getStipendio() == i.getStipendio()) return true; return false; }
145
Metodo getClass()
Il metodo getClass della classe Object ritorna un oggetto Class che rappresenta la classe di cui l'oggetto istanza: Impiegato i = new Impiegato(...); Class c = i.getClass(); System.out.print(c.getName()); viene visualizzato il nome della classe dell'oggetto i.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia
146
- capitolo 7 -
Interfacce
147
Ereditariet multipla
Alcuni linguaggi di programmazione (ad esempio il C++) consentono ad una classe di ereditare metodi e attributi da pi superclassi (ereditariet multipla). In Java non esiste un concetto analogo: una classe pu ereditare metodi e attributi da una sola superclasse. Una classe in Java per pu implementare una o pi interfaccia. Una interfaccia una classe in cui i metodi non sono definiti. Una classe che implementa una interfaccia (o pi interfacce) deve necessariamente implementare TUTTI i metodi delle interfacce. Di conseguenza una interfaccia non pu essere istanziata.
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 148
Interfacce
Dance
149
Esempio 20
public interface Dance { public int getTempo(); public getBeat(int i); } public class Waltzer implements Dance { public int getTempo() {return 750; } ... }
150
Le librerie di Java forniscono, tra le altre cose, un set di interfacce che possono essere utilizzare per creare delle classi che implementano i metodi definiti nelle interfacce. Tra queste prendiamo in esame l'interfaccia Cloneable. Per prima cosa definiamo il concetto di clonazione:
151
Metodo clone()
Supponiamo di avere il seguente codice: Impiegato a = new Impiegato(pippo, 15000); Impiegato b = a; a.setNome(pluto); System.out.print(b.getNome()); Cosa verr visualizzato a video?
152
Metodo clone()
a b
IMPIEGATO
Nome = pippo salario = 15000
153
Metodo clone()
Quando si devono creare cloni di un oggetto opportuno creare un metodo clone che esegue la clonazione. Supponiamo di aver definito tale metodo per la classe Impiegato, si avr che: Impiegato a = new Impiegato(pippo, 15000); Impiegato b = (Impiegato) a.clone(); a.setStipendio(25000); System.out.print(b.getStipendio());
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia
154
Metodo clone()
a
IMPIEGATO
Nome = pippo salario = 15000
IMPIEGATO
Nome = pippo salario = 15000
155
Metodo clone()
Per creare il metodo clone, opportuno che la classe Impiegati implementa l'interfaccia Cloneable. Questa interfaccia definisce (ma non implementa) il metodo clone che verr definito nella classe Impiegati:
class Impiegati implements Cloneable { ... public Object clone() { [ vedi pagina seguente ] } }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 156
Metodo clone()
... public Object clone() { Impiegato i = new Impiegato(this.getNome(), stipendio); return i; } ...
157
Metodo clone()
Problema: cosa succede quando si clona un oggetto che possiede, tra i suoi attributi, degli altri oggetti (incapsulamento)? Supponiamo che la classe Impiegati abbia, tra i suoi attributi, un attributo istanza della classe GregorianCalendar (data assunzione):
Impiegati a = new Impiegati(pippo, 21/06/2004); Impiegati b = (Impiegato) a.clone(); a.setDataAssunzione(22/06/2004);
Metodo clone()
IMPIEGATO
Nome = pippo Nome = pippo salario = 15000 salario = 15000 assun =
GregorianCalendar
IMPIEGATO
Nome = pippo Nome = pippo salario = 15000 salario = 15000 assun =
159
Metodo clone()
160
- capitolo 8 -
Eccezioni
161
Classificazione
Una eccezione un errore che si manifesta durante l'esecuzione di un programma. Esistono due macroaree di eccezioni: - RuntimeException (cast difettoso, accesso ad array fuori dai limiti, puntatore nullo); - IOException (lettura di un file vuoto, apertura URL errato); Bisogna cercare di intercettare qeuste eccezioni e agire di conseguenza.
162
Lancio di eccezioni
I metodi possono lanciare eccezioni, ma necessario definire il tipo di eccezione lanciata: public String readLine() throws IOException In questo esempio, la funzione readLine ritorna una stringa ma pu anche generare una eccezione di tipo IOException All'interno della procedura, l'eccezione viene lanciata con la parola chiave throw Vedi esempio seguente:
163
Esempio 21
public interface interfaccia1 { public void metodo1(); } public interface interfaccia2 { public void metodo2(); } public class miaClasse implements interfaccia1, interfaccia2 { // la classe DEVE implementare i metodi delle due interf. }
Luigi Santangelo Biennio formativo 2009-2010 Universit degli Studi di Pavia 164
165