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 x; public int z; public Up met1() {z=z+5; return this;} public void met2() {z=x+4; x=x+i;} {z=x+1;} } public class Down extends Up { public Up y; public Up met1() { z=y.z+2; Down p1=new Down(); p1.met2(); Up p2=p1.y.met1(); return p2; } {y=new Up();} } public class Princ extends Object { public static void main() { Up p1 = new Down(); Up.x = 3; Up p2=p1.met1(); } }
Ambiente delle classi 0 Object Up Down Princ non static staticClasse ereditataNome classe Object Up Object main z0x0 z0 y DownDescr Down met1Descr' met1 met2Descr met2 UpDescr Up met1Descr met1 met2Descr met2
Descr met1 = Descr met2 = Descr Up = Descr' met1 = <-, {z=y.z+2; Down p1=new Down(); p1.met2(); Up p2=p1.y.met1(); return p2;}, Down> 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 Down(); com l1l1 Princ l1l1 p1p1 ' Down z1 yl2l2 l2l2 ' Up z1
Seconda Istruzione del main: Up.x = 3; com Modifica solo l'ambiente delle classi. Frame delle variabili statiche di UP: 1 x0 1 ' x3
Terza Istruzione del main: Up p2 = p1.met1(); com ' (met1) = < -, {z=y.z+2; Down p1=new Down(); p1.met2(); Up p2=p1.y.met1(); return p2;},l 1 > l1l1 ' Down z1 yl2l2 l2l2 ' Up z1 z=y.z+2; ' l1l1 ' Down z3 yl2l2 l2l2 ' Up z1
Terza Istruzione del main: Up p2 = p1.met1(); com ' (met1) = < -, {z=y.z+2; Down p1=new Down(); p1.met2(); Up p2=p1.y.met1(); return p2;},l 1 > Down p1=new Down(); '' l3l3 Princ l3l3 p1p1 ' '' Down z4 yl4l4 l4l4 '' Up z4 /// l2l2 l1l1
Terza Istruzione del main: Up p2 = p1.met1(); com ' (met1) = < -, {z=y.z+2; Down p1=new Down(); p1.met2(); Up p2=p1.y.met1(); return p2;},l 1 > p1.met2(); '' l3l3 Princ l3l3 p1p1 ' '' Down z7 yl4l4 l4l4 '' Up z4 /// l2l2 l1l1 1 ' x3 1 '' x4 2
Terza Istruzione del main: Up p2 = p1.met1(); com ' (met1) = < -, {z=y.z+2; Down p1=new Down(); p1.met2(); Up p2=p1.y.met1(); return p2;},l 1 > Up p2=p1.y.met1(); return p2; l3l3 Princ l3l3 p1p1 '' Down z7 yl4l4 l4l4 '' Up z9 /// l2l2 l1l1 l4l4 p2p2