2010-03-28 22 views
5

Warum ist eine Objektinitialisierung mit dem Schlüsselwort new namens dynamische Speicherzuweisung, da Kompilierungszeit selbst wir den Speicher benötigen müssen für das Objekt benötigt.Java dynamische Speicherzuweisung?

auch bitte erklären, was passiert, wenn Sie ClassA object = new ClassA(); tun in Haufen und Stapel.

Antwort

7

Alle Java-Objekte werden dynamisch zugewiesen. Du verbreitest immer Referenzen zu ihnen. So ist die Sprache gestaltet. Wenn Sie das tun:

ClassA obj = new ClassA(); 

Dann wird das Objekt auf dem Heap zugeordnet ist und ein Verweis auf sich auf dem Stapel gespeichert (unter der Annahme, dass in einem Verfahren ist, natürlich). Das bedeutet, dass Sie Objekte immer weitergeben können, ohne sich Gedanken darüber machen zu müssen, wo sie gespeichert sind.

+0

Warum das Objekt im Heap gespeichert ist, und die Referenz in Stapeln gespeichert? – JavaUser

+1

Der Stapel enthält die lokalen Variablen des Methodenaufrufs. Hier nahm ich an, dass die Variable 'obj' in einem Methodenaufruf war, also ist der Verweis auf das Objekt offensichtlich auf dem Stapel. Das Objekt selbst befindet sich wie jedes andere Java-Objekt im gesamten Programm auf dem Heap. Sogar die Klassen befinden sich auf dem Heap (obwohl ein JIT-Compiler im Hintergrund einige Tricks machen könnte). –

5

Es ist dynamisch, da Sie nicht wissen, wenn es Zuteilung benötigt - Sie auf Anfrage zuordnen.

Beachten Sie auch, dass Sie wissen, wie viel Speicher dieses Objekt benötigt, aber nicht, wie viel die Mitglieder dieses Objekts erfordern. Dies kann nur zur Laufzeit bestimmbar sein (z. B. ein Array variabler Größe).

0

Wenn Sie eine Klasse von JMath haben und Sie möchten alle ihre Objekte zur Laufzeit (dynamisch Allocation) erhalten dann schrieb man nur

ArrayList<JMath> J = new ArrayList<JMath>();