Java - Объявление и инициализация объекта - PullRequest
7 голосов
/ 31 декабря 2011

При создании нового объекта я использую следующий код. Является ли в этом коде ссылка на объект переменной 'a'?

BankAcc a = new BankAcc();

Кроме того, из вышесказанного, если вышеприведенное создает новый объект для переменной a, что делает следующее? Создает ли он новый объект без ссылки на переменную / объект?

new BankAcc();

Спасибо!

Ответы [ 9 ]

7 голосов
/ 31 декабря 2011

Да и да.

Второй может быть полезен, когда вы просто хотите использовать анонимный объект, не заботясь о наличии ссылки. Как:

new Thread(new Runnable() {
     public void run () { }
}).start();
6 голосов
/ 31 декабря 2011

Как объяснено в этом руководстве по Java , создание объекта с использованием

BankAcc a = new BankAcc();

является многоэтапным процессом.У вас есть декларация , экземпляр и инициализация step

Я выделю только самые интересные части из этого урока, которые имеют отношение к вашемувопрос:

  • Чтобы объявить переменную, вы используете type name; (в данном случае BankAcc a;), что означает, что a будет / может использоваться дляобратитесь к данным типа BankAcc.На данный момент a не ссылается ни на один объект

  • Для создания экземпляра a используется ключевое слово new.Это выделит память для нового объекта и вернет ссылку на эту память.Оператору new нужен один единственный постфиксный аргумент: вызов конструктора.Независимо от того, назначаете ли вы ссылку, возвращенную путем вызова new переменной, или нет, это ваш выбор.Вы также можете использовать эту ссылку непосредственно в выражении (например, new Rectangle().height;)

  • Инициализация - это фактический вызов конструктора, который инициализирует новый объект.Конструктор вызывается оператором new

3 голосов
/ 31 декабря 2011

new BankAcc() создает объект и вызывает конструктор.Иногда вам нужно сделать это, например:

Rectangle rect = new Rectangle(new Point(100, 200), new Dimension(100, 300));

Это всего лишь пример кода, чтобы вы могли увидеть, как его можно использовать.

1 голос
/ 31 декабря 2011

Вторая строка кода создает анонимный экземпляр класса BankAcc.

Это быстрый способ создания экземпляра класса, обычно он используется, когда ссылка требуется только один раз, например, для передачи экземпляра класса в аргумент метода:

myFunc(new BankAcc());
1 голос
/ 31 декабря 2011

Да и да.

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

1 голос
/ 31 декабря 2011

Да, он просто создает объект, но он не будет привязан ни к какой ссылке, поэтому вы не можете получить доступ к этому объекту и выполнить какие-либо операции над этим объектом.Он просто останется в памяти, пока не будет собран мусор.

0 голосов
/ 08 сентября 2015

Объект - это объект реального времени или объект реального мира.Примеры объектов: перо, машина, доска, стол, карандаш и т. Д.,

Предположим, вы видите, что ваше имя класса - Book. Здесь как объявить объект

Book obj = new Book ();

0 голосов
/ 31 декабря 2011

Я думаю, что Sun неплохо справляется,

"Новый оператор создает экземпляр класса, выделяя память для нового объекта и возвращая ссылку на эту память. Новый оператор также вызывает конструктор объекта".

Так что да a является ссылкой на объект BankAcc, который вы создали с помощью оператора new, т.е. вы присваиваете = возврат new переменной a, которая являетсяссылка на экземпляр типа BankAcc

Что касается вашего второго пункта, это может быть сделано (скомпилировано и выполнено), но я не вижу многих причин, почему бы вы этого не сделали, если конструктор не сделал что-то «важное».

Редактировать: пожалуйста, обратитесь к ответу Тудора за примерами, когда применимо создание экземпляра без ссылки

0 голосов
/ 31 декабря 2011

Да, ссылка на переменную - "a", и да new BankAcc(); создает новый объект без переменной, что делает его анонимным.

...