Freie Scripten und Tutorials erstellt von Roland Geyer       Startseite | Gästebuch

Sichtbarkeit und Lebensdauer

Generell gilt:

Lebensdauer:

Mit der Sichtbarkeit bestimme ich auch die Lebensdauer (Wie lange muß es zur Verfügung stehen?) und damit den gesamten Speicherbedarf für ein Programm

Daher gilt als Grundsatz eine Variable so spät als möglich zu definieren und nur dort, wo sie gebraucht wird!

Der satische Speicher entspricht einem Object mit einer konkreten Speicheradresse. Ein statischer Speicher ist per definition kein dynamischer! Daher kann statisch nicht mit new() geladen werden da der Name für die Speicheradresse schon vorhanden ist.
Dies bedeutet, alles was nur einmal verwendet werden darf, wo keine Identität gefordert ist(-> Werte!), was dadurch nicht überschrieben werden kann, und zur Lebensdauer des Programmes zur Verfügung stehen muß, im statischen Speicher verwendet werden soll.

Jedes neue Object ist ein zusätzlicher neuer dynamischer Speicherplatz.

Der Referenzwert null löscht eine bestehende Referenz! Damit ist das Objekt nicht mehr erreichbar!

Leider können durch nachträgliche Größenänderung einer Collection Objecte, die nun ausserhalb des Indexes liegen, auch nie mehr erreicht und daher auch nie mehr gelöscht(!!) werden.

Wie im wirklichen Leben muß man sich vor Dreiecksbeziehungen in Acht nehmen!
Annahme: Wir benötigen die Objecte a,b,c nicht mehr. Unsere Klasse zeigt nur auf das Object a. Nun löschen wir die Referenz auf a.
Aber: Zeigt object a auf object b und dieses auf object c und dieses wiederum auf object a, dann werden sie also laut der Speicherverwaltung immer gebraucht und daher nie gelöscht!

Sichtbarkeit:

Die Variable g wurde im static-Speicher definiert.
Sie ist daher in jeder Klasse sichtbar.(gilt auch für eine Methode)

Der statische Speicher legt für die Klasse A eine dynamische Speicheradresse an. (= generiert ein Object vom Typ A)

Die Variable f wurde in der Klasse A definiert. Sie ist daher nur innerhalb der gesamten Klasse A sichtbar. (gilt auch für eine Methode)
Die Variable f wird mit der Instanzierung der Klasse A_A übergeben. Daher sieht auch die Klasse A_A die Variable f, da die dynamische Speicheradresse dem Konstruktor mitgegeben wurde!!

Die Klasse A sorgt dafür, daß die Klassen A_A und A_B in den dynamischen Speicher geladen werden.

Die Klasse B wird nie aufgerufen und ist daher für das Programm nicht vorhanden.

Die Variable e ist nur innerhalb der gesamten Klasse A_A sichtbar.(gilt auch für eine Methode)

Die Variable d ist nur innerhalb der gesamten Klasse A_B sichtbar. Sie kann daher von den Methoden methode1 und methode2 verwendet werden.

Die Variable b ist nur innerhalb der gesamten methode1 der Klasse A_B sichtbar. Sie kann daher von der Methode2 der Klasse A_B nicht verwendet werden!
Erst wenn die methode1 der Klasse A_B verwendet wird, wird sie in den Speicher geladen! Daher weiß bei Instanzierung der Klasse A_B - es wird also nur die Adresse von A_B und die Namen ihrer möglichen Variablen und Methoden angelegt, die virtuelle Maschiene nicht Bescheid wo sich die Variable b der Klasse A_B befindet. Sie kann daher auch nicht von vornherein auf 0 gesetzt werden. Daher müssen Variablen, die innerhalb von Methoden deklariert werden, immer auf ihren Ursprungswert gesetzt werden!

Die Variable a ist nur innerhalb der for Schleife der methode1 der Klasse A_B sichtbar und wird daher nur dort verwendet.

Die Variable c ist nur innerhalb der methode2 der Klasse A_B sichtbar.

Müssen unterschiedliche Klassen auf Variablen anderer Klassen zugreifen gibt es zwei Möglichkeiten dies zu erreichen:

Wenn kein Konstruktor gebildet wird, wird immer ein, den anderen Klassen zugänglicher Defaultkonstruktor gebildet, der dann aber auch überschrieben werden kann! Wenn das unerwünscht ist muß ein private Konstruktor + eine entsprechende Instanzierungsmethode geschrieben werden.


Weitere freie Tutorials: Rhetorik & Kommunikation Typografie & Layout Bildbearbeitung mit Photoshop oder GIMP Vektorgrafik mit Illustrator, FreeHand, Corel Draw oder Inkscape Layout mit Indesign oder Scribus Druckvorstufe GoLive Html JavaScript Flash & ActionScript Director & Lingo Assembler DOS Java objektorientiert Perl Word Excel Access PowerPoint Outlook Betriebssystem