Разница между созданием «нового объекта» и «класса имени объекта» - PullRequest
2 голосов
/ 29 ноября 2011

Скажем, например, у меня есть класс Phone.

В чем разница между:

Phone p;

и

Phone p = new Phone(200) //(200 is the price of the phone).

и

new Phone(200)

Я гуглил и даже пробовал на Eclipse, но не могу понять.

Ответы [ 5 ]

5 голосов
/ 29 ноября 2011

Phone p; объявляет только обработчик ссылок p, который нигде не указывает (он не инициализирован и не может использоваться, пока вы не назначите ему что-либо [спасибо @Anthony]).

Phone p = new Phone(200); объявляет обработчик ссылок p, который указывает на вновь созданный объект Phone (инициализированный Phone(200)).

new Phone(200) создает новый объект Phone, но так как нет ссылки на негохранится где угодно, он сразу же становится пригодным для сборки мусора (если только его конструктор не хранит где-то ссылку)действительно являются ссылочными обработчиками. Только переменные типа value содержат значения напрямую. Поскольку Phone является ссылочным типом (это class), Phone p всегда является "ссылкой на Phone".)

5 голосов
/ 29 ноября 2011

Первый фрагмент объявляет только переменную p с заданным типом Phone. Вы не создали ни одного объекта, только переменную.

Третий экземпляр нового объекта Phone (который не присвоен переменной).

Второй объединяет два, объявление и создание, в одну строку кода.

Phone p; // declaration of variable 
p = new Phone(200); // instantiation of object, assigned to variable 

Phone p = new Phone(200); // declaration and instantiation in a single line

Для использования p необходимо создать его экземпляр (или инициализировать его иным образом). Само объявление бесполезно. В локальном (переменная, объявленная в области видимости метода) запрещено использовать его без предварительной инициализации. Если это член уровня класса, то он будет просто нулевым указателем при попытке доступа к любой из его функций-членов.

1 голос
/ 29 ноября 2011
Phone p;

- это просто ссылка или «указатель», как некоторые люди, предпочитающие язык Си, назвали бы его. Он содержит путь к объекту, но в настоящее время путь нулевой.

Phone p = new Phone(200) //(200 is the price of the phone).

Здесь вы создаете новый объект Phone, вызывая его конструктор, который принимает значение 200. Затем объект присваивается ссылке p.

new Phone(200)

Здесь вы просто создаете объект типа Phone, но не имеете ссылки на него, поэтому этот объект, в свою очередь, будет собираться мусором в JVM (если на него не ссылается что-то другое внутри).

Привет!

1 голос
/ 29 ноября 2011

Phone p - это ссылка на объект Phone, который не был инициализирован.

Phone p = new Phone(200) - это ссылка на объект Phone, который был инициирован конструктором Phone(int var).

new Phone(200) создает новый объект Phone с конструктором Phone(int var).

0 голосов
/ 29 ноября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...