09.05.2014 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!