static - se specificato, indica che il campo è condiviso da tutti
final - se specificato, indica che il campo è una costante (non è modificabile)
inizializzazioni implicite
al momento della creazione di un oggetto, i campi di una classe sono inizializzati automaticamente:
campo
inizializzato a
int, long
0, 0L
float, double
0.0f, 0.0
char
’\0’
boolean
False
classe qualsiasi
null
questo succede per i campi di una classe, ma non per le variabili locali dei metodi
metodi
tipicamente pubblici (visibili a tutti)
nomi iniziano con la minuscola e seguono la camelCase
possono (ma non devono) avere parametri d’ingresso e restituire valori
definizione di un metodo:
public tipo_dati nomeMetodo(tipo_dati_in nomeParam...){// istruzioni}
dopo public - valore restituito - void se nessun valore
tra le parentesi - parametri in ingresso
this
this.var risolve conflitti di omonomia se in un metodo (es. costruttore) si passano argomenti con lo stesso nome di variabili
esempio
public Persona(String nome, String cognome){ this.nome = nome; this.cognome = cognome;} //qui, this.nome si riferisce al campo "nome" della classe Persona //(che sarà tra i campi)
esempi
public void reset(int newValue){ value = newValue;}
public int getValue(){ return value;}
chiamate di metodi
il numero e i tipi di parametri(argomenti) passati a un metodo deve coincidere con i parametri formali del metodo
costruttori
metodi per la creazione di oggetti di una classe.
stesso nome della classe.
inizializzano i campi dell’oggetto.
prendono zero, uno o più parametri.
non hanno valori di uscita ma non specificano void
non è obbligatorio specificare un costruttore - se non viene specificato, il compilatore ne crea uno di default (pubblico e vuoto - non fa nulla)
overloading
Java permette di sovraccaricare le segnature dei metodi.
Si possono specificare metodi con lo stesso nome, che abbiano numero e/o tipo di parametri diversi, e Java saprà quali chiamare.
esempio:
//costruttore classepublic Counter(){ value = 0;}//costruttore classe con valore inizialepublic Counter(int initialValue){ value = initialValue;}
il primo costruttore si chiama senza parametri d’ingresso, il secondo passandogli un intero (Java sa quale stai chiamando in base a se passi un valore o no)
creazione di un oggetto
un oggetto viene creato con l’operatore new.
static public void main(String[] args){ Counter contatore1 = new Counter(); Counter contatore2 = new Counter(42); System.out.println("Valore del contatore1: " + contatore1.getValue()); System.out.println("Valore del contatore2: " + contatore2.getValue());}
il main è statico - non serve creare l’istanza della classe che lo riconosce.
Main e Counter possono ma non devono essere nella stessa classe (/file), basta che main sia in una classe che vede Counter.
variabili locali vs campi
campi
variabili locali
variabili dell’oggetto
variabili di un metodo
visibili almeno all’interno di tutti gli oggetti della stessa classe
esistono da quando sono definite fino al termine dell’esecuzione della chiamata al metodo
esistono per tutta la vita di un oggetto
classi e metodi final
Per quanto riguarda le classi e i metodi, la parola chiave final permette di impedire ad altri programmatori di:
creare sottoclassi - se si tratta di una classe final
sovrascrivere metodi - se si tratta di metodi final