elias86 ha scritto:
La risposta giusta è la E.
Sì
elias86 ha scritto:
ma se non inizializzo una variabile di istanza essa non prende il valore di default? E poi: quindi è obbligatorio inizializzare tutte le variabili di istanza?
Una variabile di istanza, normalmente, è inizializzata automaticamente al suo valore di "default" (0 per i numerici/char, false per i boolean, null per i reference). Questo vale anche per le variabili "di classe" (static) nonché per gli elementi degli array creati con
new Tipo[dim].
Ma in quel codice, bool è
final (e non essendo subito inizializzata, si dice che è un "blank final"). Una variabile di istanza final deve (ripeto, DEVE) essere inizializzata ENTRO la fine del costruttore. Quindi se non si inizializza subito nella dichiarazione, va fatta una assegnazione o nel costruttore o in un blocco di inizializzazione di istanza.
Nota che A è sbagliata, non esiste una sintassi
instance { }
La D è comunque sbagliata perché assegna ad i (che non c'è alcun obbligo, però) mentre non assegna a bool (che invece sarebbe necessario). Cosa similare per B.
La C è pure sbagliata, usa bool che non è inizializzato.
P.S. per completezza, rimando alla documentazione ufficiale, il Java Language Specification 10, sezione
8.3.1.2. final Fields:
A blank final instance variable must be definitely assigned and moreover not definitely unassigned at the end of every constructor of the class in which it is declared, or a compile-time error occurs