VARIABILI E DICHIARAZIONI IN JAVA
Una variabile è :
indirizzo di memoria che contiene il valore assegnato alla variabile stessa
identificatore : termine per definire il nome che contraddistingue una variabile
dichiarazione di una variabile :
ogni variabile deve essere dichiarata prima del suo utilizzo all'interno del codice
tipo : definisce le caratteristiche dei valori che può accettare una variabile. Il tipo in Java, può essere primitivo (ogni tipo può memorizzare valori all'interno di un certo range, questo comporta l'occupazione di uno spazio proporzionale di memoria) o classe (vedremo più avanti)
I tipi primitivi sono :
byte (8 bit) : -128 … 127
short (16 bit) : -32768 … 32767
int (32 bit) : -231 … 231-1 (possibile anche unsigned 0 … 232-1)
long (64 bit) : -263 … 263-1 (possibile anche unsigned 0 … 264-1)
float (32 bit) : (-1)segno * mantissa (23 bit) * 2esponente (8 bit)
double (64 bit) :
boolean : true e false
char : \uX
XXX in esadecimale 0 … 65535 oppure 'simbolo' es. 'c'
tutte le variabili oggetto (legate alle classi) vengono inizializzate automaticamente a null.
Sono supportati anche le sequenze di escape (escape sequences) :
\b : backspace (indietro)
\t : tab
\n : line feed (fine linea)
\f : form feed (fine pagina / nuova pagina)
\r : carriage return (ritorno carrello/ a capo)
\' : apice singolo
\” : doppio apice
\\ : backslash (\)
Accanto ai tipi primitivi ci sono tipi speciali detti Simple Data Objects : String e Number che essendo classi hanno i vantaggi di queste ultime (lo si vedrà più avanti). Si definiscono classi Wrapper le classi legate ai tipi primitivi ma riconoscibili perché hanno l'iniziale maiuscola :
Tipo primitivo |
Classe Wrapper |
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
I primi sono tipi normali, quelli a destra sono oggetti appartementi a classi. Sono definite nel package java.lang e qualificate come final. Tutte le classi Wrapper numeriche derivano da Number
per passare da
tipo primitivo a classe Wrapper :
int pippo=345;
Integer pluto = new Integer(pippo);
per estrarre da un oggetto Wrapper un valore primitivo
int pippo = value.intValue();
??????? da completare ????????????
Le classi Wrapper sono utili anche perché hanno i metodi per convertire un numero stringa in un tipo numerico per utilizzarlo nelle espressioni e per fare calcoli :
String pippo = “”
???????
Nota – i valori possono essere espressi nei vari sistemi numerici :
binario : 0bXXXXXXXX in pratica la serie di 1 e 0 ha prefisso 0b
ottale : 0XXX in pratica le cifre del numero hanno prefisso 0
esadecimale : 0xXX in pratica le cifre hanno prefisso 0x
i valori letterali assegnati a variabili di tipo long devono terminare con l o L (es. 345L) altrimenti viene assegnato come int
i valori letterali assegnati a variabili di tipo float devono terminare con f o F (es. 345.23F)
(opzionale) anche i valori double possono terminare con d o D (es. 345.23D)
è possibile usare la notazione scientifica con e o E (es. 234.23e2)
è possibile, per migliorare la lettura, inserire il carattere underscore “_” al posto dei punti delle migliaia (es. 1_000_234.23F)
La sintassi generica per dichiarare una variabile :
public |
||||||
protected |
static |
final |
tipo |
identificatore |
= valore |
; |
private |
opzionale
obbligatorio
l'identificatore va assegnato con le seguenti regole :
sequenza di lettere e cifre
il primo carattere deve essere una lettera, l'underscore “_” o $ (quest'ultimo sconsigliato)
inizia con lettera minuscola, e se formato da più parole, iniziano tutte con lettere maiuscole
non si può usare nessuna delle parole chiave del linguaggio
esempio e definizione della tecnica :
int pippo; // dichiarazione della variabile pippo di tipo int
int pippo = 23; // dichiarazione e inizializzazione della variabile pippo di tipo int
pippo = 54; // assegnazione di un valore a una variabile con il simbolo di uguaglianza “=”
Scope di una variabile : viene così definito lo spazio di programma in cui una variabile può essere usata nel codice, in java questa area di codice è delimitata dalle parentesi graffe.
Variabili locali : quando viene dichiarata all'interno di un metodo (vedremo cos'è). Questo tipo di variabile viene creata quando viene chiamato un metodo e distrutta al termine del metodo stesso. Può essere usata solo all'interno delle parentesi graffe che delimitano il blocco codice del metodo. Non possono essere usate all'interno delle espressioni prima di una inizializzazione o assegnazione.
Variabili istanza : chiamate anche campi o field, sono dichiarate all'interno di una classe, ma all'esterno dei metodi della classe stessa. Lo scope è definito dalle parentesi graffe della classe.
Se una variabile locale di un metodo ha lo stesso nome di una variabile di istanza, quella locale (comprese le variabili parametro tra parentesi tonde del metodo) è quella attiva per essere utilizzata. Se si vuole usare una variabile d'istanza all'interno del metodo, con lo stesso nome della variabile locale, bisogna usare la keyword : this.nomevariabile
Variabili di classe : dette anche static field (campi statici), sono variabili d'istanza speciali che vengono dichiarate nel seguente modo :
static tipo identificatore = valore;
questo tipo di variabile, mantiene la memoria occupata per tutta la durata di esecuzione del programma.
Le variabili di classe e static possono avere un modificatore che ne determina la visibilità :
private : utilizzabile e visibile solo all'interno dellla classe
public : può essere usata in qualsiasi parte di codice mediante la dicitura idClasse.nomevar
protected : utilizzabile dalle classi dello stesso package della classe che la contiene e in cui è stata dichiarata. E' visibile e utilizzabile anche dalle classi derivate dalla classe che contiene la variabile.
default : se non si mette nessun qualificatore, viene sottinteso default. In Java questo tipo di variabile viene vista solo dalle classi contenute nello stesso package della classe che contiene la variabile.
final : può ricevere un valore solo una volta per tutta la durata del programma. Quindi la si può inizializzare al momento della dichiarazione o mediante un assegnamento, ma solo una volta. Da quel momento mantiene il valore.
es.
final int pippo;
final static : viene definita costante. L'identificatore, per convenzione, è scritto solo con lettere maiuscole e se composto da più parole, vanno unite con l'underscore “_”.
es.
final static int PIPPO;
Operatori in Java
l'operatore “.” serve per accedere a campi e metodi di classi o oggetti.
es.
oggetto.campo;
oggetto.metodo;
casting : forzare un valore di un tipo in un tipo diverso
es.
double pippo = 23.0;
int pluto;
pluto = pippo; // errato perché non posso assegnare a pluto di tipo int il valore di pippo di tipo double
pluto = (int)pippo; // esatto, con il casting trasformo il valore double di pippo in int e poi lo assegno alla variabile
operatori aritmetici
+ - * / %
il tipo di un operazione è dato dal tipo degli operatori. Per decidere il risultato effettuare il casting alle variabili all'interno dell'espressione.
Int pippo = (int)pluto / (int)patacca;
Operatore condizionale
(espressione booleana) ? SeVera : SeFalsa;
se l'espressione booleana è vera viene eseguita l'espressione SeVera altrimenti SeFalsa.