PRIMO ESERCIZIO (del ) Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) dopo ciascuna istruzione del main: public class Up extends Object { public static int w; public int x; public void met1() {w=x+4; x=x+1;} {x=3;} } public class Down extends Up { public Up y; public void met2() {y=new Down(); y.x=x+1; y.met1();} public void met1() {x=x+w; w=0;} {x=w;} } public class Princ extends Object { public static void main() { Up p1 = new Up(); p1.w = p1.x + 1; p1.met1(); Down p2 = new Down(); p2.met2(); } }
Ambiente delle classi 0 Object Up Down Princ non static staticClasse ereditataNome classe Object Up Object main w0x0 Up Descr Up met1 Descr met1 x0 y UpDescr Up DownDescr Down met2Descr met1 met1Descr' met1
Descr met1 = Descr Up = Descr met2 = Descr' met1 = Descr Down = Ambiente delle classi 0
Stato iniziale: : Ambiente delle classi : Heap vuota : Contiene il record di attivazione di main Princ Pila dei Frames vuota!
Prima Istruzione del main: Up p1 = new Up(); com l1l1 Princ l1l1 p1p1 ' Up x3
Seconda Istruzione del main: p1.w = p1.x + 1; com Modifica solo l'ambiente delle classi. Frame delle variabili statiche di UP: 1 w0 1 ' w4
Terza Istruzione del main: p1.met1(); com Modifica l'ambiente delle classi e l'heap. ' (met1) = l1l1 ' Up 1 ' w4 1 '' w7 x4
Quarta Istruzione del main: Down p2 = new Down(); com l2l2 ' Down l1l1 ' Up Princ l1l1 p1p1 l2l2 p2p2 x7 y x4 x=3; x=w;
Quinta Istruzione del main: p2.met2(); com ' (met2) = ' ' Down /// x7 yl3l3 l3l3 '' Down x8 y y.x = x+1; In l 2 x vale 7 l2l2 l1l1 l3l3
Quinta Istruzione del main: p2.met2(); com ' (met2) = l2l2 ' Down /// l1l1 x7 yl3l3 l3l3 '' Down x15 y '' (met1) = x = x + w; 87 1 '' w7 1 ''' w0 Infine viene modificato l'ambiente delle classi: