mercoledì 27 marzo 2013

Q9

Q9

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
B.
6
4
5
4
C.
6
4
6
4
D.
6
4
4
4
Risultato :

6
5
6
4

Per capire questo esercizio conviene analizzare cosa succede alle varie variabili passo per passo:

Si crea un oggetto myScope di tipo ScopeTest :
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.
 

Nessun commento:

Posta un commento