Leben und Sterben eines Objekts - beim O'Reilly Verlag
Leben und Sterben eines Objekts - beim O'Reilly Verlag
Leben und Sterben eines Objekts - beim O'Reilly Verlag
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Konstruktoren <strong>und</strong> GC<br />
Der Unterschied zwischen <strong>Leben</strong><br />
<strong>und</strong> Geltung bei lokalen Variablen:<br />
<strong>Leben</strong><br />
Eine lokale Variable lebt, solange ihr Stack-<br />
Frame auf dem Stack ist. Mit anderen<br />
Worten: bis die Methode abgeschlossen ist.<br />
Geltung<br />
Eine lokale Variable ist nur innerhalb der<br />
Methode in Geltung, in der die Variable<br />
deklariert wurde. Wenn diese Methode eine<br />
andere Methode aufruft, ist die Variable<br />
zwar immer noch am <strong>Leben</strong>, aber nicht<br />
mehr in Geltung, bis die Methode wieder<br />
aufgenommen wird. Sie können eine Variable<br />
nur innerhalb ihres Geltungsbereichs verwenden.<br />
public void machZeug() {<br />
boolean b = true;<br />
los(4);<br />
}<br />
public void los(int x) {<br />
int z = x + 24;<br />
verrückt();<br />
// stellen Sie sich hier mehr Code vor<br />
}<br />
public void verrückt() {<br />
char c = 'a';<br />
}<br />
machZeug() b<br />
los() x z<br />
machZeug() b<br />
verrückt() c<br />
los() x z<br />
machZeug() b<br />
los() x z<br />
machZeug() b<br />
1 machZeug() kommt auf<br />
den Stack. Die Variable<br />
»b« lebt <strong>und</strong> ist gültig.<br />
2 los() kommt oben auf 3 verrückt() wird auf den<br />
den Stack. »x« <strong>und</strong> »z«<br />
Stack geschoben, <strong>und</strong><br />
4<br />
leben <strong>und</strong> sind gültig,<br />
<strong>und</strong> »b« lebt, ist aber<br />
nicht gültig.<br />
jetzt lebt »c« <strong>und</strong> ist<br />
gültig. Die anderen<br />
drei Variablen leben,<br />
sind aber nicht in<br />
Geltung.<br />
Solange eine lokale Variable lebt, bleibt ihr Zustand<br />
bestehen. Solange die Methode machZeug() auf<br />
dem Stack ist, behält die Variable »b« ihren Wert.<br />
Aber die Variable »b« kann nur verwendet werden,<br />
solange sich der Stack-Frame von machZeug() oben<br />
auf dem Stack befindet. Das heißt, dass Sie eine<br />
lokale Variable nur verwenden können, solange die<br />
Methode dieser lokalen Variablen tatsächlich ausgeführt<br />
wird (<strong>und</strong> nicht einfach nur darauf wartet,<br />
dass über ihr liegende Stack-Frames fertig sind).<br />
verrückt() wird abgeschlossen<br />
<strong>und</strong> vom<br />
Stack genommen, »c«<br />
ist also nicht mehr gültig<br />
<strong>und</strong> tot. Wenn los()<br />
wieder aufgenommen<br />
wird, wo es verlassen<br />
wurde, sind »x« <strong>und</strong> »z«<br />
wieder lebendig <strong>und</strong> in<br />
Geltung. Die Variable<br />
»b« lebt immer noch,<br />
ist aber nicht in Geltung<br />
(bis los() fertig ist).<br />
Sie sind hier 259