



























Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
java tipi wrapper casting slide del prof
Tipologia: Slide
1 / 35
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




























I tipi in Java Ingegneria del Software
0
I tipi in Java Ingegneria del Software
1
I tipi in Java Ingegneria del Software Tipi predefiniti in Java:
3 Tipo Q.tà di Memoria Informazione rappresentata Valore di Default byte 8 bit Numero con segno (con rappresentazione complemento a due) in un range [- 2 7,(2^7 - 1)] 0 short 16 bit Numeri interi (con segno) in un range [- 215 ,(2^15 - 1)] 0 int 32 bit Numeri interi (per default con segno, signed) in un range [- 231 ,(2^31 - 1)] 0 long 64 bit Numeri interi (per default con segno, signed) in un range [- 263 ,(2^63 - 1)] 0L float 32 bit Numeri in virgola mobile in singola precisione rappresentati con segno, mantissa esponente. 0.0f double 64 bit Numeri in virgola mobile in doppia precisione. 0.0d boolean N/S [1 bit] Valori booleani false char 16 bit Caratteri del charset Unicode \u
I tipi in Java Ingegneria del Software In Java, accanto agli 8 tipi primitivi sono da considerarsi tipi di dato speciali (detti comunemente Simple Data Objects) anche i tipi String e Number (e derivati) che fungono in qualche modo da controparte dei dati primitivi dove ci sia l’esigenza di utilizzare un oggetto invece che direttamente una variabile in un tipo predefinito. Gli oggetti di tipo String sono sequenze di char che possono essere inizializzate utilizzando le virgolette (doppi apici): String author = "Douglas Noël Adams"; mentre i tipi Integer, Byte, Long, Float e Double (controparti dei medesimi tipi primitivi scritti con la prima lettera minuscola) sono inizializzabili con i medesimi literals presentati per i corrispondenti tipi nativi.
4
I tipi in Java Ingegneria del Software Un array in Java è un contenitore che permette di gestire una sequenza di lunghezza fissa di elementi tutti del medesimo tipo. La sintassi per la dichiarazione di una variabile di tipo array è la seguente: Tipo[] nome; oppure Tipo nome[]; Tipo può essere sia un tipo primitivo, sia una classe. Per default le variabili di tipo array sono inizializzate con il valore null. Quindi, prima di poterle usare, bisogna inizializzarle allocando la memoria per mezzo di new: nome = new Tipo[n]; Tutti gli elementi dell’array sono inizializzati con il valore di default previsto dal tipo. Il numero di elementi in un array, detto lunghezza dell’array, deve essere dichiarato al momento della sua allocazione e non può essere cambiato.
6
I tipi in Java Ingegneria del Software 7
x[0] x[1] x[2] x[3] x[4]
I tipi in Java Ingegneria del Software Una volta creato l’array, possiamo accedere ai singoli elementi indicandone la posizione (detta indice) grazie all’operatore ‘[]‘: nome[ 3 ]; L’indice parte da zero fino a lunghezza- 1. Si può accedere alla lunghezza dell’array utilizzando la proprietà length che è presente in ogni array. int[] numeroGiorniPerMese = new int[ 12 ]; giorniPerMese[ 0 ] = 31 ; giorniPerMese[ 1 ] = 28 ; // etc ... giorniPerMese[ 12 ] = 31 ; L’inizializzazione dell’array è decisamente scomoda, ma c’è una sintassi più diretta: int [] numeroGiorniPerMese = { 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 };
9
I tipi in Java Ingegneria del Software Quando utilizziamo gli array è nostra responsabilità non tentare di accedere ad elementi esterni al range definito. Ad esempio: int l = 5 ; int [] a = new int[l]; a[ 9 ] = 10 ; Quando mandiamo in esecuzione questo pezzo di codice, esso genera un errore a runtime (non di compilazione): la JVM, quando proviamo ad accedere al decimo elemento dell’array, solleva un’eccezione di tipo ArrayIndexOutOfBoundsException. Java permette anche l’utilizzo di array di array (detti anche array multi-dimensionali) di profondità arbitraria (o con numero di dimensioni arbitrario) e la sintassi per la loro dichiarazione ed allocazione si ottiene semplicemente ripetendo le parentesi quadre tante volte quante il numero di dimensioni.
10
I tipi in Java Ingegneria del Software Gli array sono un costrutto classico di praticamente ogni linguaggio di programmazione e, nonostante il limite notevole di non poter cambiare dimensione (size) dopo la creazione (e qualche complicatezza sintattica degli array multidimensionali), il loro utilizzo è estremamente comune in molti ambiti. Perciò Java mette a disposizione la classe java.lang.Arrays con numerosi algoritmi per operare sugli array:
12
I tipi in Java Ingegneria del Software Esempio di ricerca di un elemento in un array: Arrays.asList(yourArray).contains(yourValue); oppure Arrays.binarySearch(yourArray, elem [, new Comparator()]); Esempio di ordinamento di un array: Arrays.sort(yourArray); Esempio di copia di un array: T[] copy = Arrays.copyOf(yourArray, yourArray.length); dove T è il tipo degli elementi di yourArray.
13
I tipi in Java Ingegneria del Software Ad un primo sguardo può sembrare che ci sia poca differenza tra un tipo primitivo e la sua controparte ‘wrapped’ (spesso detta ‘boxed’); tra le due c’è in realtà una fondamentale distinzione: i tipi primitivi non sono usati per definire oggetti e non hanno associata alcuna classe e quindi devono essere trattati in modo diverso rispetto agli altri tipi e non possono avere metodi. Per ovviare a questa distinzione Java mette dunque a disposizione delle classi preconfezionate per contenere, “wrappare” i tipi primitivi. Possiamo infatti pensare ad una classe wrapper esattamente come un involucro (wrap) che ha l’unico scopo di contenere un valore primitivo rendendolo da un lato un oggetto e dall’altro “ornandolo” con metodi che altrimenti non avrebbero una loro naturale collocazione.
15
I tipi in Java Ingegneria del Software Tutte le classi wrapper sono definite nel package java.lang e sono qualificate come final, perciò non è possibile derivare da loro. Inoltre tutte queste classi sono immutabili, cioè non è possible dopo la costruzione cambiarne il valore. Mentre Character derivano direttamente da Object tutti i Data Object di tipo numerico derivano da Number che a sua volta è un discendente diretto di Object.
16
I tipi in Java Ingegneria del Software Le classi wrapper dispongono di utilissimi metodi per fare il parsing di stringe in valori numerici: String quarantatre = " 43 "; Integer q = new Integer(quarantatre); Quando utilizziamo questi metodi per la conversione occorre gestire una eventuale situazione di errore: String quarantaquattro = "quarantaquattro"; Integer q = new Integer(quarantaquattro); Il parser non sarebbe in grado di processare con successo la stringa e otterremmo un errore che la JVM segnala attraverso una eccezione di tipo NumberFormatException.
18
I tipi in Java Ingegneria del Software Originariamente, per convertire una variabile in un tipo primitivo nella sua corrispondente classe wrapper, Java richiedeva l’invocazione esplicita del costruttore o di funzioni di parsing: Integer x = new Integer ( 10 ); Double y = new Double ( 5. 5 ); Boolean z = Boolean.parseBoolean("true"); Queste operazioni sono note come operazioni di boxing, cioè “inscatolamento” del tipo primitivo nel relativo tipo wrapper al fine di utilizzare un oggetto e tutte le sue proprietà.
19