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