Создание объекта - PullRequest
0 голосов
/ 16 июня 2009
Box buttonBox = new Box(BoxLayout.Y_AXIS);  
Name1 name2 = new Name1();  

есть два Name1s

checkboxList = new ArrayList<JCheckBox>();  
name2 = new Name1();  

есть только одно Имя1

Работает, но почему?

Ответы [ 4 ]

4 голосов
/ 16 июня 2009

В первый раз Name1 name2 объявляет переменную типа Name1 с именем name2, затем она немедленно присваивается new Name1(). Во второй раз переменная уже существует; Вы просто переназначаете его.

Некоторые люди любят использовать:

Name1 name2;
name2 = new Name1();

вместо эквивалента:

Name1 name2 = new Name1();

но второй мне намного легче читать.

Я предлагаю вам пройти учебные курсы Java , особенно Getting Started и Изучение языка Java Они охватывают все виды вопросов для начинающих, как этот.

1 голос
/ 16 июня 2009
Name1 name2 = new Name1();

В этой строке вы делаете две вещи:

  1. объявляем переменную с именем name2 типа Name1
  2. создать объект, вызвав конструктор без аргументов класса Name1 и присвоить ссылку на вновь создаваемый объект переменной name2

Вы также можете разделить шаги:

Name1 name2;
name2 = new Name1();

Во втором фрагменте кода вы выполняете только шаг 2 и повторно используете (то есть перезаписываете) уже существующую переменную name2. Это возможно, потому что после объявления переменные могут использоваться (читать из и записываться в) так часто, как вы хотите, в одной и той же области видимости. Исключением являются final переменные, которые вы можете записать только один раз. Если вы сделаете это:

final Name1 name2 = new Name1();
name2 = new Name1();

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

0 голосов
/ 16 июня 2009

В дополнение к уже описанным вопросам синтаксиса и формальности, обычно считается лучшей практикой не использовать переменные таким образом. Причина - взрыв состояния; если переменная потенциально может находиться в другом состоянии в любой заданной точке вашей программы, вам придется иметь дело с большим количеством возможностей. Поэтому, как правило, лучше объявлять и использовать отдельные переменные, помечающие их как "окончательные", как их опубликовал Майкл Боргвардт.

0 голосов
/ 16 июня 2009

Как сказал Ммиерс, вы уже объявили переменную class Name1 с именем name2.

Что происходит, когда вы пишете X y = new X() - это три вещи:

  1. Слева от знака равенства вы объявляете переменную y типа X. Она еще не была создана и не существует в памяти, вы просто говоря, что он будет существовать.

  2. Справа вы создаете экземпляр X, используя ключевое слово new . Теперь он существует в куче.

  3. Сам знак равенства присваивает экземпляр, созданный на шаге 2. переменной, созданной на шаге 1.

Во второй строке вы просто пропустили шаг 1. и создали новый экземпляр, который вы присвоили уже использованной переменной.

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