2011-12-31 2 views
7

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

BankAcc a = new BankAcc(); 

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

new BankAcc(); 

Спасибо!

ответ

7

Да и да.

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

new Thread(new Runnable() { 
    public void run() { } 
}).start(); 
+0

+1 Я еще не много сделал с потоками, но я нахожу этот пример того, почему вам может не понадобиться ссылка на интересующий объект –

+1

Вам также не нужно сохранять ссылку, если объект добавляет себя к виду как часть его внутренней конструкции/инициализации. –

+0

@AaronJLang Это тоже очень интересно, не знаю, где и когда вы это сделаете, но заглянете в него, спасибо. –

1

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

1

Да, и да.

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

1

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

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

myFunc(new BankAcc()); 
0

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

3

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

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

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

0

Я думаю, что Sun некоторый его довольно хорошо,

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

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

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

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

6

Как объяснено в this Java tutorial, создание объекта с помощью

BankAcc a = new BankAcc(); 

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

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

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

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

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

-5

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

Пусть видеть ваше имя класса Book.here, как мы объявляем объект

Book OBJ = новая книга();

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