CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A. 2007-08 25/02/2008 Alessandra Toninelli [email protected] Definire una classe Java Una classe contiene solo due categorie di elementi 1. 2. Variabili di classe o di istanza (fields o campi) Metodi (il costruttore è un metodo speciale) Tutto il codice che scriviamo deve appartenere ad una di queste due categorie Java è un linguaggio OO – non procedurale! 25/02/2008 Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08 2 Il costruttore E’ possibile definire più costruttori per una stessa classe (overriding del metodo) E’ possibile chiamare un costruttore della stessa classe dentro un altro costruttore this.costruttore(); Ma deve essere la prima istruzione E’ possibile chiamare il costruttore della superclasse 25/02/2008 super(); Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08 3 Inizializzazione dei campi Dove si inizializzano i campi di una classe? Due possibili alternative: 1. Nella dichiarazione del campo (ma in una sola istruzione!) 2. All’interno di un metodo (tipicamente il costruttore) Java fornisce una inizializzazione di default 25/02/2008 Ad es. un boolean è false, un nuovo oggetto è null Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08 4 Esempio Inizalizzazione nel costruttore private Counter ore; public Clock () { ore = new Counter(); } private Counter ore; ore + = new Counter(); NO ! Dichiarazione inizalizzazione public Clock () private Counter ore = { } new Counter(); public Clock () { } 25/02/2008 Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08 5 E allora dove inizializzare? I campi con tipi di dato primitivo possono essere inizializzati insieme alla dichiarazione Gli oggetti è opportuno inizializzarli nel costruttore Eccezione Il caso in cui non siamo sicuri che ogni costruttore inizializzi i campi (ma è un caso raro… quindi usiamo il costruttore!!!) 25/02/2008 Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08 6 JVM – Creazione di un oggetto JVM assegna gli argomenti passati con il costruttore ai campi del nuovo oggetto creato Cerca il costruttore e ne legge la prima istruzione Se il costruttore inizia con l’invocazione ad un altro costruttore, JVM esegue quel costruttore Se il costruttore inizia con l’invocazione al costruttore di una superclasse, JVM esegue quel costruttore 25/02/2008 Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08 7 JVM – Creazione di un oggetto JVM cerca le definizioni dei campi ed esegue le inizializzazioni nell’ordine in cui sono scritte Solo dopo aver eseguito tali inizializzazioni esegue il restante codice del costruttore Eventuale re-inizializzazione dei campi Restituisce il riferimento all’oggetto creato 25/02/2008 Costruttori ed Inizializzazione– Fondamenti di Informatica LB – A. A. 2007-08 8