Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1
COMANDI RAPIDI:
2
3
LEZIONE 15:
Compilazione ed esecuzione del Programma:
1 – New Java Project:
3 – New Class:
4
4 – Come eseguo un software in maniera alternativa da console.
5
COME CREARE IL JAR: tasto destro sul progetto EXPORT JAR EXECUTABLE FILE SELEZIONARE CARTELLA
DOVE E’ il .class, / Selezionare cartella di uscita
6
LEZIONE 16:
Debug del software cin Eclipse:
LEZIONE 17:
Organizzazione di un programma: come alternativa a quella sotto le variabili
si possono mettere in basso sotto ai metodi.
7
LEZIONE 18:
Keyword ed espressioni:
8
9
LEZIONE 19:
Variabili e tipi di dato:
Variabili:
• Locali: definite in un metodo, create quando invocate e cancellate
quando il metodo termina. Il nome della variabile è univoco per ogni metodo,
esternamente posso invece riutilizzarlo a meno che non venga passato come parametro.
• Di Istanza: definite in una classe ma fuori dai metodi della classe stessa. Il
nome della variabile è univoco per ogni classe, esternamente posso invece riutilizzarlo a
meno che non venga passato come parametro.
10
Tipi di dato:
•Primitivi: boolean, char, byte, double, float, int, long, short; Ogni tipo ha in
valore di default.
LEZIONE 20:
Dati primitivi:
12
LEZIONE 21: La Classe String
Stringa = sequenza finita di caratteri racchiusa tra “ “ , si rappresentano con
l’oggetto string.
Se ho il carattere “ nella stringa lo devo far precedere da \:
"Lorem Ipsum.\"......."
Come si dichiara:
Concatenazione:
1) Operatore +:
String s1 = "ciao";
String s2 = "mare";
String test = s1+s2;
2) Concat:
String s1 = "ciao";
String s2 = "mare";
String test = s1.concat(s1);
Trasformazione:
1) Minuscolo:
String s1 = "ciao";
System.out.println(s1.toLowercase());
2) Maiuscolo:
String s1 = "ciao";
System.out.println(s1.toUppercase());
3) Rimozione spazi:
String s1 = " ciao ";
System.out.println(s1.trim());
13
Sostituzione:
String t = "Questo è il corso Java AVANZATO";
Estrazione:
String t = "Questo è il corso Java AVANZATO";
14
2) Substring (beginIndex, endIndex): estrae la sottostringa che va
dal carattere beginIndex, fino al carattere endIndex;
String t5 = t.substring(6,9);
System.out.println(t5);
/* è*/
LUNGHEZZA:
System.out.println(t.length());
Estrazione:
String t6 = "TEST";
String t7 = "TEST";
System.out.println(t6.equals(7));
System.out.println(t6.equalsIgnoreCase(t7));
/* Compara le stringe e ritorna TRUE o
FALSE,la versione IgnoreCase non tiene conto del
case del carattere*/
Manipolazione: starts/endsWith,
15
LEZIONE 22: GLI OPERATORI
PUNTO (.): serve per accedere a:
-Campi di una classe;
-Metodi di una classe;
-Oggetti;
OPERATORI RELAZIONALI:
>, >=,
<, <=,
==,
!=
Restituiscono TRUE or FALSE.
16
CASTING: permette passaggio da un tipo di dato ad altro.
ESPLICITO : (int) myvar
Converte il tipo della variabile in int.
Esempio:
long l1 = a;
int f = l1; /* Da errore perché l1 è long e lo sto portando a int*/
17
LEZIONE 23: METODI E VARARGS
• Cosa sono i metodi e come usarli;
• Come cambia l’accesso ai metodi in base al modificatore;
18
DEFINIZIONE DI UN METODO IN JAVA:
Metodo Main:
public static void main(String[] args)
| modificatori | |nome| | Parametri|
19
VARARGS: Variable Arguments
Dalla Java 1.5 è possibile definire metodi con numero formale di parametri
indefinito (variable arguments).
Si usa operatore “…” (tre punti). In questo modo è possibile passare al
metodo da 0 a N parametri di tipo String.
Il VARARGS è come se fosse un ARRAY di parametri che passo al metodo.
/*MAIN*/
20
Altri modificatori: final & static
21
LEZIONE 24: MODIFICATORI
Keyword riservata Java da scrivere prima della dichiarazione di Classi,
metodi, variabili.
*Variabili di Istanza= definite in una classe ma fuori dai metodi.
•Public:
Rende visibile Classi, metodi o variabili di instanza* a qualsiasi classe in qualsiasi
package;
Visibile dall’interno di
Modificatore Classe Package Derivate Ovunque
Public Si Si Si Si
Protected Si Si Si No
Default Si Si No No
Private SI No No No
22
Esempio
La classe Persona è public, quindi visibile a tutte le classi in qualsiasi package;
Le variabili e stringhe sono tutte Private quindi visibili solo nella classe Persona;
Il metodo Cammina è public, quindi visibile a tutte le classi in qualsiasi package;
Il metodo Mangia è protected, quindi visibile a tutte le classi nello stesso package o derivate;
Il metodo Dormi è default, quindi visibile a tutte le classi nello stesso package ma non alle
derivate;
Il metodo Bevi è private, quindi visibile solo alla classe in cui è definito.
Essendo CAMMINA e MANGIA con accesso Public o Protected allora è possibile fare OVERRIDE dentro
altra classa Persona2.
23
•Final: utilizzabile su classi, metodi e variabili, string invece è immutabile.
Classe final non puo’ essere estesa.
Metodo final non puo’ essere sovrascritto (no override).
Variabile final è una costante, non puo’ essere modificata e si scrivono per
convenzione in maiuscolo.
24
LEZIONE 25: SINTASSI
Classi ed Interfacce
I file che contengono Classi ed Interfacce devono iniziare con la
dichiarazione del package.
Prima del Nome dell’elemento specificare Visibilita’ & Tipo.
Il contenuto di classe o interfacce va tra graffe { }.
Dopo il nome si puo’ inserire Implements/Extends di altri elementi.
package it.corso.java;
public Class Nomeclasse Extends Classe A{
/*Contenuto*/
}
public Interface Nomeinterfaccia Implements InterfacciaB {
/*Contenuto*/
}
25
Metodi e Variabili
Prima del nome Metodi e Variabili sempre la visibilita’, se si omette è
Default ma si sconsiglia, e il Tipo.
Dopo il nome specifica argomenti in input tra ( ), se non ci sono
argomenti le parentesi sono vuote.
Le istruzioni del metodo sono tra graffe { }.
Se la variabile è fuori dai metodi allora bisogna specificarne la visibilita’,
se all’interno dei metodi allora non è necessario.
package it.corso.java;
26
Quando sviluppiamo un software è bene che anche i nostri elementi siano raggruppati
in package.
Naming convention
Solo minuscole;
Iniziano con domini o con lettere che identificano la nazione;
Avere package strutturati permette di gestire al meglio le classi;
IMPORT:Serve per usare librerie esterne al package per portarle nella nostra classe o
per usare Classi esterne al nostro package.
Indicare al progetto dove si trova il JAR della libreria esterna (se non fornita
da JAVA);
Dichiarare l’IMPORT per utilizzare gli elementi nel package esterno, seza
prefisso del package;
27
LEZIONE 27: Naming e Code Conventions
Insieme di indicazioni di sintassi Non obbligatorie ma CONSIGLIATE per rendere il
sorgente di un software leggibile a chi non lo ha scritto, soprattutto se si lavora in team.
Regole sul package, vedi lezione 26;
Nome classe: espresso con sostantivo e la prima lettera con la maiuscola,
se sono piu’ sostantivi ognuno con prima lettera maiuscola.
Sono ammesse tutte maiuscole per acronimi.
Variabili: il nome deve indicare cosa rappresenta, usare nomi brevi e chiari,
sempre con lettera minuscola, se composto da piu’ nomi a partire dal
secondo nome usare la maiuscola per la prima lettera.
28
LEZIONE 29: Creare Documentazione con JavaDoc.
Genera documentazione HTML
29
LEZIONE 30: Comandi Condizionali
IF-ELSE
If (condizione 1){
/*istruzioni*/
} else if (condizione 2){
/*istruzioni*/
} else{
/*istruzioni*/
}
–––––––––––––––––––––––––––––––––––––––––––––
SWITCH-CASE
Switch(parametro){
Case_valore_1:
/*istruzioni*/
Case_valore_2:
/*istruzioni*/
default:
/*istruzioni*/
}
Esegue le istruzioni al partire dal case che viene matchato.
Sotto DEFAULT ci sono istruzioni che voglio vengano cmq
eseguite.
Il parametro puo’ essere byte, short, char, int, Enum, String;
Lo SWITCH si interrompe con un BREAK (interrompe anche un
ciclo ma si usa anche in uno switch).
30
Esempio
Switch(numero) {
Case 10:
System.out.println(“Entro in case 10”);
Case 20:
System.out.println(“Entro in case 20”);
Default:
System.out.println(“Esegue comunque le istruzioni
default”);
}
31
Esempio
Switch(c) {
Case 10:
System.out.println(“Entro in case 10”);
Case 20:
System.out.println(“Entro in case 20”);
Case Default:
System.out.println(“Esegue comunque le istruzioni
default”);
}
32
LEZIONE 31 RETURN
while (condizione) {
/*Esegui Istruzioni fino a che la condizione è vera*/
}
33
• do-while: simile a while ma la condizione viene verificata alla fine del
blocco. Nel do-while l’esecuzione viene effettuata almeno una volta anche
se la condizione è falsa. Attenzione, se la condizione è sempre vera si va in
loop infinito!
do {
/* Esegui Istruzioni fino a che la condizione è vera */
} while (condizione)
Esempio:
• for each:
In questo caso la condizione del for è sostituita da una variabile che
rappresenta l’indice dell’array. Pertanto la condizione è, fino a che array ha
elementi, allora esegui l’istruzione.
34
Numeri[] arr = {0,1,2,3};
for (int elemento : arr) {
System.out.println(elemento);
}
35
LEZIONE 33: Break, Continue.
36
LEZIONE 34: Programmazione orientata agli oggetti.
vs
Programmazione ad Oggetti: basato su classi che contengono attributi(variabili) e
metodi (funzioni che ne definiscono il comportamento).
Vantaggi OOP:
•Permette di modellare problemi reali: con le classi e gli oggetti creati da queste;
37
Elementi dell’OOP in JAVA:
Classe: rappresenta un tipo di dato;
Attributo: proprieta’ di una classe;
Metodo: rappresenta le azioni che la classe puo’ eseguire;
Oggetto (istanza): rappresentazione fisica della classe. Ogni
oggetto create possiede tutti gli attributi e i metodi della classe;
Principio di Incapsulamento
Gli attributi non sono accessibili (private – visibili solo nella Classe), lo sono
invece i metodi (public-visibili a tutte le Classi del package) che fanno azioni su
di essi con ad esempio get e set.
38
Principio di Incapsulamento -> Information Hiding
Attributi private;
Non faccio vedere quali manipolazioni ne faccio e allo stesso modo non
sono accessibili da altre classi.
Metodi public;
Sono accessibili da altre classi perché così posso usare queste funzioni.
39
Principio di Ereditarieta’ Tecnica che consente di estendere le
caratteristiche di una classe ad una altra classe, quindi modellare gerarchie di
classi.
Classe che eredita:
Mantiene metodi e attributi della classe dalla quale deriva;
Puo’ avere metodi e attributi propri;
Puo’ ridefinire il codice di alcuni metodi ereditati mediante un
meccanismo chiamato overriding (vedi Polimorfismo).
In questo esempio la Classe PRODOTTO è la classe chiamata BASE e le Classi chiamate SMARTPHONE
e LIBRO sono chiamate classi derivate. Smartphone e Libro hanno gli stessi attributi di Prodotto ma
ne hanno altri propri, ed utilizzano gli stessi metodi di Prodotto ma ne hanno altri definiti.
40
Principio di Polimorfismo Strettamente legata all’ereditarieta’ e si
effettua con l’overriding.
Una Classe Base ha dei metodi che vengono ereditati (ereditarieta’) dalle
Classi Derivate, ma le Classi Derivate li possono modificare sovrascrivendoli
(overriding).
In questo esempio la Classe PRODOTTO è la classe chiamata BASE e le Classi chiamate SMARTPHONE e
LIBRO sono chiamate classi derivate. La Classe Prodotto ha un metodo che recupera l’elenco dei negozi.
Smartphone e Libro hanno gli stessi metodi, ma ognuno con una sovrascrizione recupera solo gli stores
di competenza.
41
LEZIONE 35: Cosa succede a livello HW quando instanziamo una classe?
Istanzia(dichiara) una Classe viene riservata ad essa una certa area di memoria
che conterra’ ATTRIBUTI e VALORE ATTRIBUTI;
Inizializza una Classe –> Riempio quella area di memoria.
42
LEZIONE 36: Garbage Collector (GC);
Modello Memoria
JVM
Non Heap
HEAP memory
(dati dinamici) memory (Byte
Code)
Permanent Gen.
Eden Survivor
43
LEZIONE 37: CLASSE E OGGETTO.
Classe: tipo di dato complesso, rappresenta il prototipo di un oggetto reale.
Contiene attributi (Valori) e metodi (Azioni).
Oggetto: tipo di dato della Classe, rappresenta una istanza della Classe e
possiede attributi e metodi definiti nella Classe.
ATTENZIONE: se su cliente2 provo a invocare un metodo avro’ errore in quanto è stato dichiarato
(allocata memoria, ma non ci sono valori in memoria) come oggetto ma non inizializzato e quindi
on potro’ neanche scriverci.
44
LEZIONE 39: COSTRUTTORE.
COSA E’: Uno o piu’ Metodi all’interno di una Classe che permettono
di creare oggetti (istanze) delle Classe.
45
Quando invece il Costruttore non è default: devo usare la l’identificatore this.
che associa ogni parametro passato al metodo costruttore agli attributi
dell’oggetto.
public class Prodotto { /*istanzia la Classe*/
Metodi Metodi
Costruttore(id,nome,prezzo) Costruttore(id,nome,prezzo)
46
Approfondimento: identificatore this.
L’identificatore this è un puntatore speciale alla classe che costituisce
l’attuale contesto di programmazione. Grazie a this è possibile accedere a
qualsiasi metodo o attributo della classe stessa mediante un’espressione del
tipo:
this.metodo();
}
L’identificatore this può essere usato anche per richiamare un costruttore. In
questo caso, la parola this deve essere seguita dai parametri richiesti dal
costruttore in questione racchiusi tra parentesi, e deve per forza comparire
come prima istruzione di un altro costruttore:
public MyClass() {
att1 = a1;
att2 = a2;
}
47
LEZIONE 40: ACCESSO AGLI ATTRIBUTI DI UNA CLASSE.
48
LEZIONE 42: Classe Object
La classe Object è la superclasse ereditata da tutte le classi Java, direttamente o
indirettamente.
Infatti:
Quando creiamo una classe A che non eredita altre classi, implicitamente la classe A
erediterà la classe Object.
quando creiamo una classe B che eredita la classe A (che non eredita nessuna classe),
A erediterà Object ed indirettamente anche B erediterà Object.
La classe Object definisce una serie di metodi che consentono ad un oggetto, tra le
altre cose, di:
49
50
LEZIONE 43: Il metodo getClass()
Il metodo getClass() ritorna un oggetto di tipo java.lang.Class, che consente di acquisire
informazioni di runtime sulle classi e sulle interfacce disponibili nella JVM.
Un oggetto di tipo Class consente di accedere ad una serie di informazioni sulla classe, ad
esempio:
Esempio
1. public class Main {
2. public static void main(String[] args) {
3. Main m = new Main();
4. m.stampaInfo();
5. }
6.
7. public void stampaInfo() {
8. System.out.println(getClass().getName()); <--- ritorna il nome della classe comp
leto di package
9. System.out.println(getClass().getSimpleName()); <--- ritorna solo il nome della classe
, senza package
10.
11. System.out.println("");
12. System.out.println("metodi...");
13. for(Method m : getClass().getMethods()) {
14. System.out.println(m.getName()); <--- stampa tutti i metodi della class
e e delle sue superclassi (main, converti, stampaInfo, equals, ...)
15. }
16. }
17. }
51
LEZIONE 44: La classe Object.
I metodi toString() e equals(Object o)
Il metodo toString()
L'implementazione del metodo toString() nella classe Object restituisce una rappresentazione
testuale di un oggetto.
Esempio
1. public class Order {
2. private Long id;
3. ...
4. public Order() {
5. ...
6. }
7. public void createInvoice(String filename) {
8. ...
9. }
10. }
11.
12. public class Main {
13. public static void main(String[] args) {
14. System.out.println(new Order().toString()); <----- L'output sarà it.corso.java.oop.es
empiosuper.Order@15db9742
15. }
16. }
Esempio
1. public class Order {
2. private Long id;
3. private String status;
4. private Calendar orderDate;
5.
6. public Order() {
7.
8. }
9. public Order(Calendar orderDate, String status) {
10. this.orderDate = orderDate;
11. this.status = status;
12. }
13. }
14.
15. public class SalesOrder extends Order {
16. public SalesOrder(Calendar orderDate, String status) {
17. super(orderDate, status);
18. }
19.
20. public void createSalesInvoice() {
21. String filename = "";
22.
23. super.createInvoice(filename);
24. }
25. @Override
26. public String toString() {
52
27. /* EFFETTUIAMO L'OVERRIDE DEL METODO STAMPANDO IL NUMERO DELL'ORDINE E LA DATA */
28. return "Ordine n. " + getId() +
29. " del " + getOrderDate().get(Calendar.DATE) +
30. "/" + getOrderDate().get(Calendar.MONTH) +
31. "/" + getOrderDate().get(Calendar.YEAR);
32. }
33. }
34.
35. public class Main {
36. public static void main(String[] args) {
37. SalesOrder order = new SalesOrder(Calendar.getInstance(), "CONFIRMED");
38. order.setId(123L);
39.
40. System.out.println(order); <-------- L'output sarà Ordine n. 123 del 4/3/2018
41. }
42. }
Il metodo public boolean equals(Object obj) consente di confrontare due oggetti tra
loro, in particolare e ritorna true se sono uguali.
L'implementazione del metodo nella classe Object utilizza
l'operatore == per verificare se i due oggetti sono uguali.
L'implementazione default del metodo ritorna true se e solo se l'oggetto A e l'oggetto
B sono lo stesso oggetto.
Esempio
1. public class Main {
2. public static void main(String[] args) {
3. System.out.println(new Order().toString());
4.
5. SalesOrder order = new SalesOrder(Calendar.getInstance(), "CONFIRMED");
6. order.setId(123L);
7.
8. System.out.println(order);
9.
10. SalesOrder order2 = new SalesOrder(Calendar.getInstance(), "DELIVERED");
11.
12. System.out.println(order.equals(order2)); <--- order ed order2 sono oggetti distinti quin
di equals ritorna FALSE
13.
14. SalesOrder order3 = order;
15. System.out.println(order.equals(order3)); <--- order ed order3 sono lo stesso oggetto qui
ndi equals ritorna TRUE
16. }
17. }
53
E' il caso della classe String.
Esempio
1. public class Main {
2. public static void main(String[] args) {
3.
4. String a = "Paolo";
5. String b = "Alessandra";
6. String c = "Paolo";
7.
8. a.equals(b); <--------- Paolo e Alessandra sono due stringhe diverse quindi il risult
ato è FALSE
9. a.equals(c); <--------- Paolo e Paolo sono due stringhe uguali quindi il risultato è
TRUE nonostante b e c siano due istanze diverse della classe String
10. }
11. }
Esempio 2
1. public class SalesOrder extends Order {
2. public SalesOrder(Calendar orderDate, String status) {
3. super(orderDate, status);
4. }
5.
6. @Override
7. public boolean equals(Object obj) {
8. if(obj != null && obj instanceof SalesOrder) {
9. if(((SalesOrder)obj).getId() == getId()) {
10. return true;
11. }
12. }
13.
14. return false;
15. }
16. }
Nella nostra classe SalesOrder, due ordini sono uguali se hanno lo stesso id (vedi
codice sopra...).
54
LEZIONE 45: Ereditarieta’ (pag.41 per definizione)
Come si effettua in JAVA extends
Sintassi:
public class ClasseB extends ClasseA {
/*Definizione*/
}
La classeB eredita attributi e metodi della classeA di tipo public o
protected.
è perché non esiste un costruttore default nella Classe BASE, mentre esiste un
costruttore ma al quale magari vengono passati piu’ parametri
55
LEZIONE 46: Incapsulamento (pag.49 per definizione)
Attributi e metodi public sono disponibili a tutte le Classi del package;
Attributi e metodi private sono disponibili solo alla Classe che li contiene.
56
LEZIONE 47: Polimorfismo (pag.41 per definizione)
Override di uno o piu’ metodi della classe Base operato dalla Classe Derivata,
chiaramente impone che venga applicato il principio di Ereditarieta’ perché la Classe
Derivata erediti i metodi della Classe Base.
57
Esempio provato: La Classe televisore è una derivata della Classe Prodotto.
In Televisore faccio override dei metodi set e get prezzo per fare in modo che quando
richiamo tv1.getPrezzo il prezzo di tv1 che era 149.99 viene modificato dall’override su
set prezzo a 149,99+15 (margine) e poi sul get prezzo metto un fisso tramite la variabile
tmp = 200.
58
LEZIONE 48: Applicazione pratica Ereditarieta’,
Incapsulamento e Polimorfismo.
Progetto di un gestionale
1) Definisco una Classe Cliente con attributi : id, nome, cognome e codice
fiscale con modificatore di accesso private e generandone in metodi di
accesso set & get secondo il principio di incapsulamento.
59
•Ereditarieta’ Operatore super()
Se una classe B estende una classe A, attraverso la keyword super, nella classe
B possiamo accedere agli elementi della classe A.
La keyword super, può essere utilizzata sia per le variabili sia per invocare metodi,
sia per invocare costruttori.
60
•Polimorfismo Permettere alla Classe Derivata di
sovrascrivere (override) i metodi della Classe Base
61
62
LEZIONE 51-54: Relazioni tra Classi
•Associazione
63
•Aggregazione
Esempio di codice:
64
•Composizione
Relazione nella quale c’è un vincolo maggiore rispetto all’aggregazione,
infatti la Classe B esiste solo se esiste una istanza della Classe A.
65
Richiamo alle mappe fatte per UML in data 20/11
66
LEZIONE 55: Eccezioni
Situazioni anomale e impreviste Vanno evitate.
Esempi:
Divisione per zero, variabile dichiarata ma non inizializzata, etc….etc….
Tipi di ECCEZIONI:
•Checked (Controllate) Dovute ad eventi esterni al nostro SW.
Esempio: accesso ad un file esterno che non esiste.
}
private void stampaTesto(String testo) {
if(testo != null) {
String tmp = testo.concat("...");
System.out.println(tmp);
} else {
System.out.println("Testo è null");
}
67
LEZIONE 56: Meccanismi di controllo delle Eccezioni
68
GESTIONE DELLE ECCEZIONI:
•Catturo e gestisco;
•Proseguo il programma ignorando l’eccezione (probabilmente il
programma termina);
THROWABLE
Superclasse
69
ECCEZIONI PERSONALIZZATE
Creo una Classe per la gestione delle eccezioni che ha come Superclasse
Throwable. Quindi che possa ereditare tutti i metodi di gestione delle
eccezioni.--> Poi aggiungo un seriale(1) e genero Override dei metodi(2)…
70
….e modifico i metodi per avere errori personalizzati(3)…
71
LEZIONE 57: TRY-CATCH-FINALLY
Flusso
1) Eseguo le istruzioni in TRY, se si generano Eccezioni eseguo le
istruzioni nel Catch e poi quelle nel Finally.
2) Se non si generano Eccezioni nel TRY allora passo direttamente
alle istruzioni del Finally, senza eseguire quelle nel Catch.
3) Comunque sia le istruzioni nel Finally vengono sempre eseguite
alla fine.
Applicazioni
Per leggere su file con FileReader o scrivere su file con FileWriter, oppure in
una connessione ad un DB , le invocazioni dei metodi vanno inserite nel
Finally perché se si generano Eccezioni i file o la connessione rimangono
aperti e generano crash.
72
LEZIONE 58: THROW
Usato per lanciare una eccezione durante l’esecuzione del software.
THROWABLE
Superclasse
Java.lang.Error Java.lang.Exception
73
SEZIONE 10 – Array, liste, mappe, collezioni, classi wrapper,
Autoboxing & Unboxing
74
LEZIONE 61: Array
Contenitore di elementi, che sono tipi primitivi (int,String…) o implementati
dall’utente.
Caratteristiche:
• Lunghezza “n” fissa e dichiarata in inizializzazione;
•Elementi tutti dello stesso tipo;
•indice primo elemento = 0, ultimo elemento “n-1”;
Esempio: agenda telefonica.
Pagina 1 tutti i nomi con A;
Pagina 2 tutti i nomi con B;
……
Sintassi:
-Dichiarazione Type[] nomeVariabile = new Type[n]
Type = tipo dato | nomeVariabile = variabile che identifica l’array | new
= keyword er costruire l’oggetto Array | Type(n) = numero di elementi
“n”.
-Restituzione “n” nomeVariabile.length = attributo del tipo Array
che restituisce la lunghezza dell’array “n” di tipo int.
-Accesso elemento nomeVariabile[] ad esempio se devo stampare o
fare altre operazioni.
-Inizializza nomeVariabile[0]=10; inizializza a 10 il primo elemento
dell’array.
Dichiara, crea e inizializza omettendo n tra le quadre e inizializzando con un
numero di elementi, l’array è definito in base al numero di elementi inizializzati (nel caso sotto
3).
Main m = new Main(); /*Creo oggetto del main per eseguire il metodo creaArray()*/
m.creaArray(); /*Invoco il metodo creaArray() per eseguirlo da main*/
/*Array di oggetti*/
public class Smartphone{ /*Definizione della classe Smartphone con attributi e metodi*/
77
Array di Array = Matrici
Sintassi:
-Dichiarazione
Bidimensionale: Type[] [] nomeVariabile = new Type[n][m]
Le coppie di quadre indicano quante dimensioni, gli indici sono
rispettivamente n = n°colonne , m=n°righe.
for(int i=0;i<matrice.length;i++) {
/*iteriamo le righe*/
for(int j=0;j<matrice[i].length;j++) {
/*iteriamo le colonne*/
matrice[i][j]=i;
System.out.print(matrice[i][j]);
}
78
LEZIONE 62: Interfacce - Collection e Map
Collection e Map Liste dinamiche
PS: Array si usano per le liste statiche.
79
LEZIONE 63: ArrayList.
ArrayList Classe che permette implementazione
dell’interfaccia List.
Costruttori Istanziano la lista.
ArrayList<Tipo>() : crea instanza Classe ArrayList vuota
senza specificare la capacita’;
Esempio:
public void esempioArrayList() {
/*Istanzio Lista di oggetti Smartphone vuota*/
80
Metodi Manipolano la lista.
Object.get(int index) : restituisce elemento in
posizione index; Attenzione: la lista come un array parte da
elemento 0.
81
String toString(): restituisce una stringa elenco di tutti
gli elementi della lista;
Es: System.out.println(lista.toString())
[tony, Jerry, Mario, Chiara, Marta]
82
LEZIONE 64: Classi HashMap e Properties(usata per file config.)
HashMap Classe che permette implementazione
dell’interfaccia Map. K sono elementi chiavi(Key), e V
elementi Valori.
Costruttori Istanziano la mappa.
HashMap<K,V>() : crea instanza Classe HashMap vuota
senza specificare la capacita’;
Esempi:
HashMap<String,Prodotto> lista = new HashMap< String,Prodotto >();
/*Mappa di oggetti di tipo prodotto, con chiavi Stringhe*/
/*una Map non puo’ essere istanziata in quanto Interfaccia (vedi errore), quindi
uso il costruttore HashMap, o in alternativa usa la Classe HashMap per
istanziare*/
HashMap<String,Smartphone> mappa2 = new HashMap<String,Smartphone>();
Errore.
83
Metodi Manipolano la mappa.
Object.put(Object Key,Object Value) : aggiunge
l’elemento value alla mappa associandolo alla Key; Se
la mappa contiene gia’ la Key allora l’elemento
associato viene sostituito da quello del put.
Il metodo ritorna null se la Key non esiste, oppure il
vecchio oggetto associato.
p.load(is);
System.out.println(p.getProperty("db-
name"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
85
LEZIONE 65: Interfaccia Iterator
LEZIONE 66: Come iterare gli elementi di una lista con For,
For each e Iterator.
1) Creo la lista:
86
2) Posso iterarvi all’interno usando FOR EACH:
for (Smartphone p : lista2) {
/*Ciclo For each che stampa gli oggetti di una lista*/
System.out.println(p.getMarca()+" "+p.getModello());
/*Ad ogni iterazione del ciclo FOR ogni oggetto della lista viene
stoccato dentro l'oggeto p e stampato*/
}
Iterator<Smartphone> it = lista2.iterator();
while(it.hasNext()) {
Smartphone p2 = it.next();
System.out.println(p2.getMarca()+" "+p2.getModello());
}
87
Come iterare le chiavi:
1)Metodo “keySet()”:
Set<String> keys = mappa2.keySet();
System.out.print(string+" ");
}
2)Metodo “Iterator()”:
while(it2.hasNext()) {
String chiave = it2.next();
System.out.println(chiave);
}
88
LEZIONE 67: Classe Wrapper
Trasforma un tipo di dato primitivo in un oggetto equivalente, incapsulando
al suo interno una variabile di tipo primitivo.
Esempio:
package wrapper;
89
LEZIONE 68: Boxing, Autoboxing e Unboxing
90
SEZIONE 11
LEZIONE 69: Interfacce
Componente che permette di definire metodi comuni a piu’ tipi di oggetti,
senza implementarne la logica.
Contiene definizione dei metodi che eseguono le azioni;
Non contiene costruttori;
Puo’ contenere variabili ma soltanto STATIC, quindi costanti.
L’interfaccia non puo’ essere istanziata, ricordiamo quando si definiva una lista
con List non era ammesso poi creare una istanza List ma usavo ArrayList.
91
Esempio:
92
LEZIONE 70: Classi Astratte
Classe che permette di dichiarare caratteristiche comuni a piu’ Classi.
A differenza dell’interfaccia permette di definire attributi, metodi e
costruttori;
Sintassi • Classe: abstract class
Metodi: abstract (prima del metodo), posso anche avere metodi che non
sono astratti in una classe Astratta.
Non puo’ essere istanziata per creare oggetti come invece si fa con una
classe normale.
93
USO Definire entita’ astratte come Prodotto, FormaGeometrica,
Animale…che poi possono essere estese in classi che costruiscono entita’ piu’
concrete.
94
LEZIONE 71: Classi Inner, Locali & Anonime.
Premesse:
Per ogni Classe deve esistere un file .Java (src) che è nominato con lo stesso nome
con la quale è dichiarata la classe.
Per istanziare un oggetto di una classe devo usare un costruttore che usa la
keyword new. Esempio: Lavatrice l1 = new Lavatrice();
3 tipi di Eccezioni:
o Inner: è un classe definita all’interno di un’altra classe, ma al di
fuori dei metodi;
Accesso:
-Lettura: anche dell’esterno in
funzione del modificatore.
-Istanze della Inner: si possono
creare solo da dentro la classe che
la contiene.
95
Esempio:
Esiste anche un altro modo per poter instanziare la Classe Inner al di fuori
della Classe in cui è stata definita, cioè’ definirla di tipo Static.
96
o Locale: è un classe definita all’interno di un’altra classe, ma
dentro ad un metodo;
97
Il vantaggio è che per implementare l’interfaccia non ho creato un nuovo file
.java relativo ad una Classe ma la ho implementata nel Main risparmiando la
creazione e gestione di un file.
98
SEZIONE 13 – INPUT/OUTPUT
LEZIONE 76: Classe File
Il costruttore principale della Classe File riceve in ingresso una variabile di
tipo String, cioè il percorso dove salvare il file.
99
Esempio creazione Directory (mkdir) e File (CreateNewFile)
package files;
import java.io.File;
import java.io.IOException;
/*ATTENZIONE !!!: Un oggetto di tipo File puo' essere: FILE o DIR, dipende solo dal path
passato come parametro*/
m.creadir(dir); /*Creo la Directory TEST FILE nel path, invocando il metodo creadir()*/
m.creafile(dir+"\\test-file-.txt"); /*Creo il file test-file-.txt nella Directory del
path, invocando il metodo creafile()*/
m.creafile(dir+"\\test-file2-.txt"); /*Creo il file test-file2-.txt nella Directory del
path, " "*/
m.creafile(dir+"\\test-file3-.txt"); /*Creo il file test-file3-.txt nella Directory del
path, " "*/
File d = new File(dir); /*Crea nuovo oggetto di tipo File nel path "dir", quindi una
DIRECTORY nel path DIR */
System.out.println(d.isDirectory()); /*Restituisce TRUE se la Directory esiste*/
File f = new File(file); /*Crea nuovo oggetto di tipo File nel path "dir", quindi una
DIRECTORY nel path DIR */
System.out.println(f.isFile()); /*Restituisce TRUE se il File esiste*/
for (File file2 : files) { /*Questo ciclo for each permette di stampare tutti i nomi dei
file nella directory*/
System.out.println(file2.getName());
/*Per il tipo File esiste anche il metodo getName(), che restituisce una Stringa con il
nome del file*/
}
100
public void creadir(String path) { /*Come metodo per la creazione del file, ma per la
directory*/
File d = new File(path);
if(!d.exists()) {
try {
d.mkdir();
} catch (Exception e) {
System.out.println("Errore nella generazione della Directory");
}
} else {
System.out.println("La Directory "+d.getName()+" è gia' esistente");
}
if (f.delete()) {
System.out.println("Il file "+f.getName()+" è stato cancellato con successo");
}else {
System.out.println("Cancellazione del file fallita");
}
101
LEZIONE 77: Classi per scrivere su File FileWriter, BufferedWriter,
PrintWriter
102
Aggiunto il metodo sotto che scrive un file buffered.
public void scriviBufferedWriter(String path,String[] testo) throws IOException {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(getFile(path)));
/*Costruisco l'oggetto BufferedfileWriter, questo richiede come parametro l'oggetto
FileWriter*/
for (String string : testo) {
bw.write(string);
bw.newLine(); /*Manda a capo 1 riga*/
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bw.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
103
PrintWriter
Sotto la creazione del metodo con PrintWriter, anche esso per essere costruito ha necessita’ dell’oggetto filewriter come
parametro.
PrintWriter pw = null;
try {
pw = new PrintWriter(new FileWriter(getFile(path)));
/*Costruisco l'oggetto BufferedfileWriter, questo richiede come
parametro l'oggetto FileWriter*/
for (String string : testo) {
pw.write(string);
pw.println();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
pw.close();
} catch (Exception e2) {
e2.printStackTrace();
}
104
}
if(f.exists()) { /*Se il file esiste nel path procedo con le operazioni di lettura*/
char[] testo = new char[1024]; /*Instanzio array char di size 1024 dove salvare i
char letti dal file*/
105
BufferedReader: come file reader ma bufferizza, piu’
efficiente;
if(f.exists()) { /*Se il file esiste nel path procedo con le operazioni di lettura*/
char[] testo = new char[1024]; /*Instanzio array char di size 1024 dove salvare i
char letti dal file*/
System.out.print(testo[i]);
} else {
System.out.println("Il file non esiste");
}
}
106
LEZIONE 79 & 80: Input da tastiera.
InputStreamReader
107
Scanner
La classe Scanner rappresenta la soluzione più semplice per realizzare in Java un input da uno
stream di caratteri. La classe Scanner appartiene al package java.util e i suoi oggetti sono in grado di
individuare e interpretare i tipi primitivi e le stringhe presenti all’interno di uno stream di
caratteri. Essa presenta diversi costruttori che permettono di ottenere un oggetto di tipo Scanner a
partire da oggetti di altri tipi, quali ad esempio:
1. InputStream, utile in quei casi in cui, per esempio, si debba leggere da tastiera
(l’oggetto System.in, si ricorda, è di tipo InputStream).
2. String, utile in quei casi in cui sia necessario procurarsi degli input da una stringa.
3. File, utile in quei casi in cui l’input proviene da un file di testo.
Per approfondimenti al solito si rimanda alla documentazione ufficiale del linguaggio Java (link), di
seguito vediamo solo alcuni esempi di utilizzo per i primi due casi: lettura da tastiera e da stringhe,
per il terzo caso della lettura da un file di testo, invece, si rimanda al seguente link. Prima però
accenniamo a quali sono alcuni dei metodi più utilizzati di questa classe.
(Si tenga presente che la classe Scanner suddivide lo stream dei caratteri in token, cioè in spezzoni
di stringhe separate dai caratteri delimitatori. I caratteri delimitatori di default sono: gli spazi, i
caratteri di tabulazione e i caratteri di newline).
Il caso più tipico di utilizzo di un oggetto di classe Scanner è quello che utilizza il
metodo nextLine() per leggere una riga intera.
108
1import java.util.Scanner;
7 }
8}
Vediamo anche alcuni esempi di utilizzo della classe Scanner con gli altri metodi:
1 import java.util.Scanner;
2 import java.util.InputMismatchException;
6 int i, j;
8 try {
10 i = scanner.nextInt();
12 j = scanner.nextInt();
13 System.out.println(i + j);
14 } catch(InputMismatchException ex) {
16 } finally {
17 scanner.close();
18 }
19 }
20}
Nell’esempio di sopra vengono prelevati da tastiera due numeri e vengono sommati. Il tutto è stato
inserito in un blocco try-catch-finally poiché gli input forniti potrebbero non essere degli interi e in tal
caso viene lanciata un’eccezione di classe InputMismatchException. In questo esempio viene utilizzato
anche il metodo close() che permette di rilasciare le risorse occupate dall’oggetto di classe Scanner
creato.
109
INPUT DA UNA STRINGA - LETTURA DI TOKEN DI INTERI
1 import java.util.Scanner;
7 while(scanner.hasNext()) {
9 if(scanner.hasNextInt())
10 System.out.println(scanner.nextInt());
11 // altrimenti lo salta
12 else
13 scanner.next();
14 }
15 scanner.close();
16 }
17}
Nell’esempio di sopra si ha una stringa che utilizza un delimitatore di default (lo spazio), dalla quale
vengono estratti solo gli interi saltando i restanti token. L’output ottenuto è il seguente:
1
56
78
1092
100
Il delimitatore di default può essere modificato tramite il metodo useDelimiter(), come nell’esempio
seguente:
INPUT DA STRINGA, LETTURA DI TOKEN E INTERI CON DELIMITATORE ';'
Java
1 import java.util.Scanner;
110
5 String input = "100;120;300;80";
7 scanner.useDelimiter(";");
8 while(scanner.hasNext()) {
10 if(scanner.hasNextInt())
11 System.out.println(scanner.nextInt());
12 // altrimenti lo salta
13 else
14 scanner.next();
15 }
16 scanner.close();
17 }
18}
100
120
300
80
NOTA BENE. Attenzione, l’esempio precedente funziona solo se i numeri interi sono separati
esattamente da un solo carattere di punto e virgola. Se si vuole che funzioni anche nel caso in cui a
separarli ci siano più caratteri diversi, compreso gli spazi, bisogna passare al metodo un’espressione
regolare, argomento questo complesso per il quale si rimanda alla documentazione del linguaggio. Qui
si fornisce solo la soluzione nel caso tra i numeri interi, oltre al punto e virgola, ci siano anche degli
spazi. In questo caso la stringa da passare al metodo è : “\s*;\s*”. Il primo backslash nell’espressione
indica che quello che segue è un carattere speciale, ossia l’espressione s* che vuol dire “da 0 a un
numero a piacere di spazi“.
P.S. Per risolvere un problema di estrazione di token da una stringa come il precedente, può essere più
conveniente o sfruttare direttamente i metodi della classe String, come ad esempio i
metodi split() e trim(), o riccorre alla classe StringTokenizer sftuttando i
metodi hasMoreToken() e nextToken(), per i quali si rimanda alla documentazione ufficiale del linguaggio
Java (link). Si riporta qui sotto per comodità il codice di un semplice esempio di utilizzo per entrambe le
soluzioni citate prima:
Java
111
5 //Prima soluzione: metodi split() e trim() della classe String
6 String[] vs = s.split(";");
8 System.out.print(vs[i].trim());
9 System.out.println(vs[i+1].trim());
10 }
11
12 System.out.println("");
13
16 while(st.hasMoreTokens()) {
17 System.out.print(st.nextToken().trim());
18 System.out.println(st.nextToken().trim());
19 }
20 }
21}
22*/
112
LEZIONE 129: Unit Test
Fase di Test Fase importante del processo di sviluppo. Spesso viene
trascurata in piccole realta’ mentre in ambienti Enterprise (PA, banche, e-
commerce….) ricopre un ruolo fondamentale.
-Debug Verifica solo errori di sintassi/struttura e non di semantica.
-Test Se ben progettati posso rilevare errori di semantica e
sviluppandoli parametrici possono essere simulati vari Use Case ai quali
il prodotto potrebbe essere sottoposto in uso reale, prevendo bug o
crash.
Esecuzione dei test:
Manuale Creo un Main che esegue i test che voglio condurre.
Strumenti Specifici Software o librerie che supportano lo sviluppatore, uno di
questi è il Framework Java JUnit.
113
Vantaggi degli Unit Test:
Rendono piu’ semplici le modifiche: usando Unit Test è piu’ facile
modificare il codice con la tranquillà che il componente modificato
continui a funzionare. Se vengono scritti Unit Case per ogni metodo o
per ogni unita’ funzionale, se una modifica porta errori sara’ piu’ facile
individuare in quale metodo si genera l’errore.
Rendono piu’ semplici integrazione tra componenti: gli unit test
limitano i bug legati all’interazione tra unità funzionali, grazie alla alla
garanzia che ogni unità risponda come richiesto.
Costituiscono un supporto alla documentazione di progetto: in
ambiente Enterprise è molto spesso richiesto un Test Reporting sia si
unita’ sia di sistema come documentazione da consegnare per il
progetto stesso.
Limiti:
Possono non essere in grado di identificare tutti i malfuzionamenti:
infatti testando singole unita’ funzionali o gruppi di esse, non possono
garantire una funzionalita’ totale del sistema. Tuttavia un buon
progetto del test consente di limitare al minimo le possibilità di
malfunzionamento.
Sono piu’ efficaci quando sono usati insieme ad altre tecniche di
testing del software.
Non testano le prestazioni del sistema ma solo la funzionalita’.
114
LEZIONE 130: Framework JUnit
Cosa è?- Framework open-source che consente di scrivere unit test,
supportando chi sviluppa codice nell’attivita’ di codice.
Cosa fa?- Permette di scrivere ed eseguire Test Case e Test Suite per oggetti e
Classi.
Integrato in Eclipse come plug-in, 2 versioni:
JUnit 3 prima di Java 5 utilizza reflection per individuare test;
JUnit 4 richiede Java 5 o oltre e utilizza annotations per definire test;
Come funziona?
1) Creo una classe Test Case per ogni classe;
2) Se ho Test Case correlati creo una classe Test Suite che contiene
riferimento alle classi Test Case.
115
Next Seleziono i metodi da testare. Nel mio caso trasla().
Con il PROMPT sopra Eclipse mi informa che JUNIT 4 non è nel build path del progetto,
cio’ significa che il JAR di JUNIT non è tra le librerie richieste e se lo voglio aggiungere.-->
OK.
116
Nel mio esempio si è creata la Classe di test Cerchio:
@Before: indica un metodo di test che deve essere eseguito prima di tutti i test.
Se nel mio esempio sopra avessi un metodo con Annotation @Before allora JUnit
esegue prima quello e poi il resto dei metodi @Test.
@After: indica un metodo di test che deve essere eseguito dopo di tutti i test. Se
nel mio esempio sopra avessi un metodo con Annotation @After allora JUnit
esegue prima tutti i @Test e poi @After.
@BeforeClass: indica un metodo di test che deve essere eseguito prima di tutti
i test. Se nel mio esempio sopra avessi un metodo con Annotation @BeforeClass
allora JUnit esegue prima questo e poi tutti i metodi @Test della Classe di test.
@AfterClass: indica un metodo di test che deve essere eseguito dopo di tutti i
test. Se nel mio esempio sopra avessi un metodo con Annotation @AfterClass
allora JUnit esegue prima i metodi @Test della Classe di test e poi questo.
La Classe TEST CASE non deve definire un costruttore e tutti i metodi devono essere
VOID e senza parametro in ingresso e devono eseguire il Throws della Classe
Exception.
117
Come funziona TEST CASE:
Il confronto si effettua con i metodi Statici della Classe ASSERT di JUnit, questi metodi si
usano facendone l’import statico, vedi esempio a pagina precedente org.unit.jupiter
1)Fino a Java 3 il metodo di test andava chiamato testXXXXX dove con XXXX si intende il metodo da
testare nella Classe che è nel TestCase. Da Java 5 non è piu’ necessario in quanto non si usano la
Reflections ma le annotations per definire i test.
2)assertEquals(…) è un metodo statico che verifica che la Classe restituisca la somma.
118
Esiti del test
119
FARE MAPPA CONCETTUALE DI:
-STRINGHE
TO DO:
120
121
ad oggetti
http://searchsoa.techtarget.com/definition/object-oriented-programming
http://it.wikipedia.org/wiki/Programmazione_orientata_agli_oggetti
122
ESERCIZI E APPROFONDIMENTI
123
ESERCIZIO STUDENTE: allenamento su uso di variabili, costruttori e array; In verde le elaborazioni per
comprenderei riferimenti in Java.
this.nome = nome;
return this.nome;
Array: Studente
indice 0 1 2 3
chiave nome nome nome nome
Studente a1 = new Studente("Gigi"); //Creo oggetto "Gigi" di tipo Studente e puntato da a1 ( a1 ==> obj1, obj1.name = "Gigi")
Quando istanzio l’oggetto a1 di tipo studente, fisicamente in a1 viene scritto l’indirizzo della cella di memoria dove è contenuto l’oggetto
nello stack di tipo heap.
studenti[0] = a1; //Salvo il puntatore a1 all'oggetto Gigi nella cella 0 del'array "studenti"
Quando dentro all’array scrivo a1 nell’elemento di indice 0 sto di nuovo scrivendo l’indirizzo di memoria dell’oggetto 1.
Array: Studente
indice 0 1 2 3
chiave a1:@FF1A18 nome nome nome
124
a1.setNome("Giorgio"); //Cambio il nome dell'oggetto puntato da a1 ( a1 ==> obj1, obj1.name = "Giorgio" )
Array: Studente
indice 0 1 2 3
chiave a1:@FF1A18 nome nome nome
a1 = new Studente("Luca"); //Creo un NUOVO oggetto "Luca" di tipo Studente e puntato da NUOVA variabile a1 ( a1 ==> obj2,
obj2.name = "Luca" )
Array: Studente
indice 0 1 2 3
chiave XX:@FF1A18 nome nome nome
studenti[1] = a1; //Salvo il nuovo puntatore a1 (che punta a Luca) nella cella 1 dell'array "studenti"
Array: Studente
indice 0 1 2 3
chiave XX:@FF1A18 a1:@FF1A19 nome nome
125
//CASO 1
Studente a2;
a2 = a1; //ATTENZIONE! Non sto creando un nuovo oggetto, ma solo un NUOVO PUNTATORE all'oggetto puntato dal secondo
puntatore a1 ( a1,a2 ==> obj2, obj2.name = "Luca" )
Array: Studente
indice 0 1 2 3
chiave XX:@FF1A18 a1:@FF1A19 nome nome
a2: @FF1A19
a2.setNome("Paolo"); //Cambio il nome dell'oggetto "Luca" in "Paolo". a1 e a2 puntano allo stesso oggetto quindi
a1.getNome()=a2.getNome() ( a1,a2 ==> obj2, obj2.name = "Paolo"
studenti[2] = a2;
Array: Studente
indice 0 1 2 3
chiave XX:@FF1A18 a1:@FF1A19 a2:@FF1A19 nome
a2: @FF1A19
126
a1.setNome("Carlo");//Cambio il nome dell'oggetto "Paolo" in "Carlo". a1 e a2 puntano allo stesso oggetto quindi
a1.getNome()=a2.getNome() ( a1,a2 ==> obj2, obj2.name = "Carlo" )
studenti[3] = a1;
Array: Studente
indice 0 1 2 3
chiave XX:@FF1A18 a1:@FF1A19 a2:@FF1A19 a1:@FF1A19
a2: @FF1A19
//CASO 2
studenti[2] = a2;
studenti[3] = a1;
127
System.out.print(studenti[i].getNome()+" ");*/ //NOTA: Cella 0 di "studenti" punta a obj1
(obj1.name = "Giorgio"); le celle 1 e 3 puntanto entrambe a obj2 (obj2.name="Carlo"); cella 2 punta a obj3
(obj3.name = "Paolo").
//CASO 3
studenti[2] = a2;
studenti[3] = a1;
//a1.setNome("Carlo");
128
GESTIONE DELLA MEMORIA NELLA PROGRAMMAZIONE AD OGGETTI
(Universita’ di Pisa) https://pages.di.unipi.it/milazzo/teaching/AA1314-ProgJava/slides/13-OOP2.pdf
129
130
Ricerca Max/Min in un array:
Con bucle For
public class ArrayMax {
public static void main(String[] args) {
int[] intArray = {24, 2, 0, 34, 12, 110, 2};
int maxNum = intArray[0];
for (int j : intArray) {
if (j > maxNum)
maxNum = j;
}
System.out.println("Maximum number = " + maxNum);
}
}
131
Classe Math
132
SHORTCUT ECLIPSE
Ctrl + spazio
Autocomplete, ossia mostra i suggerimenti della parola che state
scrivendo.
Ctrl + 7
Commenta/Decommenta la riga corrente o la selezione di codice in
blocco.
Ctrl + Click
Eseguito sul nome di un metodo o di una classe, apre la finestra in cui si
trova il metodo o la classe ed il cursore si sposta esattamente al punto
desiderato.
Ctrl + Shift + R
Refactoring, ossia rinomina la variabile selezionata ovunque nel
workspace aggiornandone i riferimenti.
Ctrl + H
Cerca il testo selezionato all'interno del workspace. Utile ad esempio per
sapere dove un setter o getter viene chiamato.
Tab/Shift + Tab
Indenta il codice (o selezione di codice) verso destra o sinistra.
Ctrl + D
Cancella la riga su cui si trova il cursore.
Ctrl + Shift + O
Organizza gli import. Significa che quando avete usato una classe non
ancora importata, con questo shortcut importate tutte le librerie
mancanti e rimuovete quelle inutili.
Ctrl + 1
Attiva il quick fix, l'equivalente di premere a sinistra sulla lampadina che
appare a sinistra quando nella riga sono presenti sottolineature gialle (o
rosse). Funziona anche su variabili non sottolineate in giallo (o rosso), in
questo caso fra le possibilità c'è il rename.
Ctrl + E
Mostra l'elenco di tutte le classi aperte. Utile quando avete tante finestre
e non vedete dove si trova la classe che vi serve. In progetti grandi è
utilissimo.
Ctrl + I
Indenta correttamente la riga corrente.
133
Ctrl + Shift + F
Indenta correttamente l'intera pagina. Si può personalizzare il
comportamento andando su Window -> Preferences -> Java -> Code
style -> Formatter.
Ctrl + F11
Lancia l'applicazione (pulsante play verde). Di default è la classe corrente
che avete aperta nell'editor.
Ctrl + M
Massimizza o ripristina le dimensioni del tab in cui state scrivendo.
Ctrl + Shift + L
Mostra tutte le shortcut definite in Eclipse.
134