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() {x=x+w; w=w+1;} {x=w;} } public class Down extends Up { public Up y; public void met1() {y=new Down(); y.met2(x+3);} public void met2(int i) {x=y.x+1; w=i;} {y=new Up();} } public class Princ extends Object { public static void main() { Up.w = 5; Up p1 = new Down(); p1.y.met1(); p1.met1(); } }
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 DownDescr Down met2Descr met1 met1Descr' met1
Descr met1 = Descr Up = Descr' met1 = Descr met2 = 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.w = 5; com Modifica solo l'ambiente delle classi. Frame delle variabili statiche di UP: 1 w0 1 ' w5
Seconda Istruzione del main: Up p1 = new Down(); com l1l1 Princ l1l1 p1p1 ' Down x5 yl2l2 l2l2 ' Up x5
Terza Istruzione del main: p1.y.met1(); com Modifica l'ambiente delle classi e l'heap. ' (met1) = 1 ' w5 1 '' w6 l1l1 ' Down x5 yl2l2 l2l2 ' Up x10 2
Quarta Istruzione del main: p1.met1(); com ' (met1) = ' l1l1 ' Down x5 yl3l3 /// l2l2 l3l3 '' Down x6 yl4l4 l4l4 '' Up x6 y=new Down(); Dopo l'esecuzione di:
Quarta Istruzione del main: p1.met1(); com ' (met1) = l1l1 ' Down x5 yl3l3 /// l2l2 l3l3 '' Down x7 yl4l4 l4l4 '' Up x6 y.met2(x+3); Dopo l'esecuzione di: In l 1 x=5 x+3=8 '' (met2) = 1 '' w6 1 ''' w8 3