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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Konstruktoren <strong>und</strong> GC<br />

Objekt-Killer Nr. 3<br />

Die Referenz explizit<br />

auf null setzen<br />

public class ReRef {<br />

}<br />

Ente e = new Ente();<br />

public void los() {<br />

e = null;<br />

}<br />

Die Bedeutung von null<br />

Wenn Sie eine Referenz auf null setzen,<br />

heben Sie die Programmierung der Fernsteuerung<br />

auf. Mit anderen Worten: Sie<br />

haben eine Fernsteuerung, aber am anderen<br />

Ende gibt es keinen Fernseher. Eine<br />

null-Referenz hat Bits, die »null« repräsentieren<br />

(wir wissen nicht, was diese Bits sind,<br />

<strong>und</strong> kümmern uns auch nicht darum, das<br />

überlassen wir der JVM).<br />

Wenn Sie im richtigen <strong>Leben</strong> eine nicht<br />

programmierte Fernsteuerung haben, passiert<br />

nichts, wenn Sie auf eine der Tasten<br />

drücken. Aber in Java können Sie auf einer<br />

null-Referenz nicht auf die Tasten drücken<br />

(d.h. den Punktoperator verwenden). Sie<br />

hätten vielleicht gern, dass etwas für Sie<br />

bellt, aber die JVM weiß (das ist ein Laufzeitproblem,<br />

kein Compiler-Fehler), dass<br />

leider kein H<strong>und</strong> da ist, der das machen<br />

könnte!<br />

Wenn Sie auf einer null-Referenz den<br />

Punktoperator verwenden, erhalten Sie<br />

zur Laufzeit eine NullPointerException.<br />

Im Kapitel Riskantes Verhalten werden Sie<br />

alles zu Exceptions lernen.<br />

1<br />

e<br />

ReRef-Objekt<br />

Ente-Objekt<br />

Heap<br />

Die neue Ente kommt auf den Heap <strong>und</strong> wird von<br />

»e« referenziert. Da »e« eine Instanzvariable<br />

ist, lebt die Ente, solange das ReRef-Objekt<br />

lebt, das sie instantiiert hatte. Es sei denn ...<br />

2<br />

e<br />

ReRef-Objekt<br />

Ente-Objekt<br />

diese Ente wird aufgegeben.<br />

Die einzige Referenz darauf<br />

wurde auf null gesetzt.<br />

Heap<br />

»e« wird auf null gesetzt. Das ist, als hätte man eine<br />

Fernsteuerung, die auf nichts programmiert ist. Sie dürfen<br />

auf »e« noch nicht einmal den Punktoperator verwenden,<br />

bis sie neu programmiert wird (ihr ein Objekt zugewiesen<br />

wird).<br />

Sie sind hier 263

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!