Given:
public class ScopeTest {
int z;
public static void main(String[] args) {
ScopeTest myScope = new ScopeTest();
int z = 6;
System.out.println(z);
myScope.doStuff();
System.out.println(z);
System.out.println(myScope.z);
}
void doStuff() {
int z = 5;
doStuff2();
System.out.println(z);
}
void doStuff2() {
z = 4;
}
}
What is the
result?
A.
6
5
6
4
6
5
6
4
B.
6
4
5
4
6
4
5
4
C.
6
4
6
4
6
4
6
4
D.
6
4
4
4
Risultato :6
4
4
4
6
5
6
4Per capire questo esercizio conviene analizzare cosa succede alle varie variabili passo per passo:
ScopeTest myScope = new ScopeTest();Questo oggetto tra le altre cose ha un attributo di tipo intero di nome z: int z ;
Al primo print si ha un stampa della variabile locale z:
int z = 6;
System.out.println(z);
che ovviamente stampa 6. Quindi :
z variabile locale del main vale 6
z attributo della classe myScope viene qui inizializzato a 6.
poi si entra dentro doStuff(). Dentro il metodo si usa una variabile locale z : int z = 5;
Adesso:
z variabile locale del main vale sempre 6
z variabile locale di doStuff() vale 5
quindi l'attributo z dell' oggetto myScope adesso vale 5.
Si entra dentro doStuff2() che ha una variabile locale che viene inzializzata a 4. La situazione adesso è:
z variabile locale del main vale sempre 6
z variabile locale di doStuff() vale sempre 5
z variabile locale di doStuff2() vale 4
quindi z attributo dell' oggetto myScope vale 4
Si esce da doStuff2() , si torna a doStuff() e si stampa z. Questa è quindi la variabile locale di doStuff() quindi si stampa 5.
Si esce da doStuff() , si torna nel main e si stampa z. Questa è quindi la variabile locale di main quindi si stampa 6.
Infine si stampa l'attributo z di myScope e quindi si stampa 4.
che ovviamente stampa 6. Quindi :
z variabile locale del main vale 6
z attributo della classe myScope viene qui inizializzato a 6.
poi si entra dentro doStuff(). Dentro il metodo si usa una variabile locale z : int z = 5;
Adesso:
z variabile locale del main vale sempre 6
z variabile locale di doStuff() vale 5
quindi l'attributo z dell' oggetto myScope adesso vale 5.
Si entra dentro doStuff2() che ha una variabile locale che viene inzializzata a 4. La situazione adesso è:
z variabile locale del main vale sempre 6
z variabile locale di doStuff() vale sempre 5
z variabile locale di doStuff2() vale 4
quindi z attributo dell' oggetto myScope vale 4
Si esce da doStuff2() , si torna a doStuff() e si stampa z. Questa è quindi la variabile locale di doStuff() quindi si stampa 5.
Si esce da doStuff() , si torna nel main e si stampa z. Questa è quindi la variabile locale di main quindi si stampa 6.
Infine si stampa l'attributo z di myScope e quindi si stampa 4.
Nessun commento:
Posta un commento