ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Basi | Espressioni | Comandi | Classi | Ereditarieta | Eccezioni | Thread | Utilita | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

Classi
OOP
Ereditarietà
Polimorfismo
Chiamata
Classi
Record
Istanze
Costruttori
Campi
this
Allocazione
Più costruttori
this()
Inizializzazioni
Riferimenti
Ordine
Metodi
Invocazione
Overloading
Attenzione
Finalizzazione
Static e Final
Campi statici
Blocco static
Metodi statici
Visibilità
Costanti
Package
import
import *
Classpath
L'interprete
Zip e Jar

<<< Inizializzazioni >>>

Dobbiamo affrontare adesso un altro problema: cosa succede alle espressioni di inizializzazione? Stiamo parlando di quelle espressioni che seguono la dichiarazione campi, come nel seguente esempio.

class Stack {
      // inizializzazione
      int top=0; 
      int stack;
      Stack (int size)
       { stack = new int [size];}
      Stack (){ this (10);}
}
Le espressioni di inizializzazione:

Abbiamo che top=0 è una espressione di inizializzazione. Il concetto importante da capire è che questa espressioni vengono eseguite all'atto della costruzione. Ovvero fanno parte del costruttore.

appartengono a tutti i costruttori

Possiamo dire che l'espressione di inizializzazione appartengono a tutti i costruttori. Ovvero se vogliamo che un campo abbia un valore iniziale, lo stesso per tutti i costruttori, definiamo il suo valore in una espressione di inizializzazione.

vengono eseguite prima del costruttore
ma dopo l'allocazione

Queste espressioni vengono eseguite prima del costruttore. In pratica quando creo un oggetto, per prima cosa viene allocata la memoria, poi vengono eseguite le espressioni di inizializzazione dei campi e infine si raggiunge il corpo del costruttore. In rapace qualcos'altro che avviene prima, lo vedremo più avanti.

non possono contenere comandi

Ovviamente posso usare questo meccanismo solamente quando posso inizializzare un campo senza fare troppi calcoli. Queste espressioni infatti non possono contenere comandi. Se devo fare delle operazioni prima di ottenere il valore da assegnare, devo spostare l'operazione nel corpo del costruttore.

non possono sollevare eccezioni

Un altro problema è che non posso gestire eccezioni. Anche in questo caso devo spostare le operazioni dentro il corpo di un costruttore.

notare che new int[size], richiedendo un parametro, va posto in un costruttore

Infine l'ultimo caso, ma non meno importante, è quello che nelle espressioni di inizializzazione non posso usare il parametri passati al costruttore. Anche in questo caso devo ricorrere al corpo di un costruttore. In tutti questi casi, qualora si ripetessero blocchi di codice comune, devo sfruttare il meccanismo del this() per ridurlo.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com