2010-03-28 7 views
5

Почему инициализация объекта используется с помощью ключевого слова new, называемого динамическим распределением памяти, поскольку само время компиляции нам нужно знать память, необходимую для этого объекта.Явное распределение динамической памяти?

Кроме того, пожалуйста, объясните, что происходит, когда вы делаете ClassA object = new ClassA(); в кучи и стек.

ответ

7

Все Объекты Java динамически выделяются. Вы всегда передаете ссылки на них. Так разработан язык. Когда вы делаете:

ClassA obj = new ClassA(); 

Тогда объект выделяется в куче, и ссылка на него сохраняется в стеке (в предположении, что внутри метода, конечно). Это означает, что вы всегда можете передавать объекты, не беспокоясь о том, где они хранятся.

+0

Почему объект хранится в Heap и ссылка сохраняется в стеке? – JavaUser

+1

В стеке хранятся локальные переменные вызова метода. Здесь я предположил, что переменная 'obj' была в вызове метода, поэтому, очевидно, ссылка на объект находится в стеке. Сам объект находится в куче, как и любой другой объект Java во всей программе. Даже классы находятся в куче (хотя компилятор JIT может делать некоторые дополнительные трюки за кулисами). –

5

Это динамично, так как вы не знаете , когда ему необходимо выделить - вы выделяете по требованию.

Обратите внимание, что вы знаете, сколько памяти требуется этому объекту, но не сколько , что для этого требуется объект. Это может быть определено только во время выполнения (например, массив переменного размера).

0

Если у вас есть класс JMath, и вы хотите, чтобы получить все свои объекты на время выполнения (выделение Динамически), то вы только что написали

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

 Смежные вопросы

  • Нет связанных вопросов^_^