Lezione 2 : Basi del linguaggio
Variabili
Variabili





Come visto nella lezione 1 le classi registrano il proprio stato nelle variabili
 int cadenza = 0;
 int velocita = 0;
 int marcia = 1;
Quali sono le regole e le convenzioni per la nomenclatura dei campi ?
Apparte int, quali altri tipi di dati esistono ?
I campi devono essere inizializzati ?
Esiste un valore di default ?
Variabili

Il linguaggio Java definisce questi tipi di variabili :
 Variabili di istanza ( instance variables )
 Variabili di classe ( class variables )
 Variabili locali ( local variables )
 Parametri
Variabili di istanza ( instance variables )



Campi non statici
Gli oggetto registrano il proprio stato in campi non statici ( campi dichiarati
senza la parola chiave static )
Il loro valore è univoco per ogni istanza della classe ( per ogni oggetto )
 es. : la velocità corrente di una bicicletta è indipendente dalla velocità di
un'altra
Variabili di classe ( class variables )




Campi statici ( modificatore static )
Dice al compilatore che esiste esattamente una copia di questa variabile
indipendentemente dal numero di istanze della classe
Es . il numero di marce di una bicicletta ( o meglio del modello di una
bicicletta ) potrebbe essere dichiarato static
 static int numGears = 6
Si potrebbe aggiungere il modificatore final per indicare che la variabile non
può mai cambiare ( ad esempio se stiamo definendo un particolare modello di
bicicletta )
Variabili locali ( local variables )




Sono definite a livello di metodo
Come una oggetto registra il proprio stato in delle variabili di classe, un
metodo tiene traccia dello stato in delle variabili locali
Non esiste un modificatore che definisce una variabile come locale ... solo il
contesto : fra la parentesi aperta '{' e chiusa '}' di un metodo ( o di un 'ciclo' )
Non hanno visibilità all'esterno del metodo
Parametri


Sono vere e proprie variabili che vengono passate ( per valore ) a un metodo.
Sono visibili solo all'interno del metodo
Naming convention










I nomi di variabili ( come delle classi ) sono case sensitive
 int a è diverso da int A
Sono valide tutte le combinazioni di caratteri Unicode che cominciano per
lettera, numero, $ e _
La convenzione dice di usare, come primo carattere, una lettera, non numeri o
$ o _ .... ma è una convenzione
Come convenzione, il carattere $ non è mai usato
Gli spazi non sono autorizzati
A partire dal secondo carattere si può utilizzare qualsiasi lettera, numero o
simbolo, escluso lo spazio
Utilizzare nomi completi
 int marcia piuttosto che int m
Un nome di variabile non può essesre una keyword del linguaggio
Se il nome di variabile è composto da una sola parola, utilizzare le minuscole,
se è composto da + parole usare la maiuscola per il primo carattere di ogni
parola successiva alla prima
Se è una costante, utilizzare le maiuscole e '_' come separatore
Naming convention

Esempio :
 int marcia = 1;
 int marciaCorrente = 1;
 final int NUMERO_MARCE = 6;
Java Language Keywords
abstract
assert***
boolean
break
byte
case
catch
char
class
const*
*
**
***
****
continue
for
default
goto*
do
if
double
implements
else
import
enum**** instanceof
extends
int
final
interface
finally
long
float
native
not used
added in 1.2
added in 1.4
added in 5.0
new
package
private
protected
public
return
short
static
strictfp**
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while
Variabili

Il linguaggio Java è fortemente tipato :
 ogni variabile deve essere dichiarata prima di essere usata
 Questo comporta dichiarare :
 tipo di dato
 nome della variabile
 es: int marcia = 1;
 esiste una variabile che si chiama 'marcia'
 contiane un valore numerico (intero)
 il suo valore iniziale è 1
Variabili




Il linguaggio Java supporta i tipi di dato primitivi
Un tipo primitivo è un tipo di dato definito all'interno del linguaggio
E' indicato da una keyword
I valori “primitivi” non condividono lo stato con altri valori primitivi
( a differenza degli oggetti )
Variabili

I tipi primitivi supportati sono :








byte: 8-bit signed complemento a due. Valore minimo di -128 massimo 127 (inclusi).
short: 16-bit signed complemento a due ( intero ). Valore minimo -32,768 massimo
32,767 (inclusi).
int: 32-bit signed complemento a due ( intero ). Valore minimo -2,147,483,648
massimo 2,147,483,647 ( inclusi )
long: 64-bit signed complemento a due (intero) . Valore minimo 9,223,372,036,854,775,808 massimo 9,223,372,036,854,775,807 (inclusi).
float: single-precision 32-bit IEEE 754 floating point.
 Da non usare per valori precisi come “currency”
 Usare java.math.BigDecimal .
double: double-precision 64-bit IEEE 754 floating point.
 Generalmente la scelta di default per i dati decimali
boolean: Solo due possibili valori = vero o falso
char: single 16-bit Unicode character. Valore minimo '\u0000' (o 0) massimo '\uffff'
(o 65,535 inclusi).
Nota : il complemento a due
l complemento a due è il metodo più diffuso per la rappresentazione dei numeri relativi in informatica.
Esso è inoltre una operazione di negazione (cambiamento di segno) nei computer che usano questo
metodo. La sua enorme diffusione è data dal fatto che i circuiti di addizione e sottrazione non
devono esaminare il segno di un numero rappresentato con questo sistema per determinare quale
delle due operazioni sia necessaria, permettendo tecnologie più semplici e maggiore precisione.
Il bit iniziale (più a sinistra) del numero ne indica il segno: se è 0, il numero è un numero binario in
forma normale; se è 1, il numero è negativo, e se ne ottiene il valore assoluto invertendo il valore
dei singoli bit e aggiungendo 1 al numero binario risultante.
Un numero binario di 8 cifre può rappresentare con questo metodo i numeri compresi tra -128 e +127.
Questo metodo consente di avere un'unica rappresentazione dello zero, e di operare efficientemente
addizione e sottrazione sempre avendo il primo bit a indicare il segno.
Variabili



Caso particolare : java.lang.String
Le stringhe sono immutabili
Per creare una variabile di tipo String basta racchiudere il suo valore tra doppi
apici
 String stringa = “questa è una stringa”;
 stringa = “questa è un'altra stringa”;
Variabili


I valori di default :
 byte
=0
 short = 0
 int = 0
 long
= 0L
 float = 0.0f
 double = 0.0d
 char
= '\u0000'
 String (o un oggetto ) = null
 boolean = false
Alle variabili locali non viene assegnato un valore di default.
Variabili




I “Literals”
Quando si dichiarano delle variabili di tipo “primitivo” non si usa la keyword
new ma gli si assegna un valore literal
Un valore literal è computato direttamente dal compilatore
es :

boolean result = true;

char capitalC = 'C';

byte b = 100;

short s = 10000;

int i = 100000;
Variabili


I valori numerici interi possono essere espressi usando il sistema
 decimale
 ottale
 esadecimale
es :

int decVal = 26;
// Il numero 26, in decimale

int octVal = 032;
// Il numero 26, in ottale

int hexVal = 0x1a; // Il numero 26, in esadecimale
Variabili


I valori numerici floating point ( float e double ) possono essere espressi usando
la notazione
 decimale
 scientifica
 float literal ( 32 bit )
 decimal literal ( 64 bit )
Es. :
 double d1 = 123.4;
 double d2 = 1.234e2; // come d1, ma notazione scientifica
 float f1 = 123.4f;
Variabili




I valori char literal e String literal possono essere espressi come caratteri Unicode
(UTF-16)
Se l'editor o il file system non supporta questa notazione si possono utilizzare le
sequesze di escape unicode '\u'
Si usa l'apice singolo (') per i char e il doppio apice (“) per i tipi String
es.
 char capitalC = '\u0108'; // C
 String siSegnor = "S\u00ED Se\u00F1or"; //Sí Señor
Variabili









Il linguaggio, inoltre, supporta sequenze di escape per alcuni caratteri speciali :
\b (backspace)
\t (tab)
\n (line feed)
\f (form feed)
\r (carriage return)
\" (doppio apice)
\' (singolo apice)
\\ (backslash).
Variabili


null literal
 si assegna a qualsiasi tipo di variabile che non sia un tipo primitivo
class literal
 E' il nome della classe a cui si appende “.class”
 Fà riferimento all'oggetto di tipo Class che si riferisce a se stesso :
 es.
 Class string = String.class;
 string si riferisce a un classe String
 string è un oggetto di tipo Class