Загрузка данных в конструкторы, а не в конструкторы - PullRequest
2 голосов
/ 08 июня 2010

Я просто хочу знать разницу между загрузкой данных внутри конструктора и загрузкой данных вне конструктора, но не внутри каких-либо методов

пример: загрузка внутри конструктора

public class Model{
   Object testobject;

   public Model(){
      testobject=new Object();
   }

}

VS

пример: загрузка внешнего конструктора

public class Model{
   Object testobject=new Object();

   public Model(){
   }

}

Ответы [ 6 ]

4 голосов
/ 08 июня 2010

Разница лишь в том, что если у вас несколько конструкторов, написать утомительно ...

testObject = new Object();

в каждом. Однако, если вы решили, что хотите ...

public Model(Object otherObject) {
    testObject = otherObject;
}

Вы бы сделали немного больше работы, если бы объявили это дважды.

3 голосов
/ 08 июня 2010

Влияет на порядок инициализации.Инициализатор выполняется перед телом конструктора.В простом случае, таком как ваш пример, это не важно, но в более сложном коде это может быть.

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

3 голосов
/ 08 июня 2010

На самом деле есть одна небольшая разница (но, вероятно, слишком очевидная, чтобы заметить). Автоматическая инициализация (внешний конструктор, как вы ее называете) выполняется перед конструктором. Просто вопрос о порядке исполнения ...

1 голос
/ 08 июня 2010

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

Вот пара ссылок, обсуждающих, когда называются статика, статические блоки, поля, блоки инициализации элементов и конструкторы:

1 голос
/ 08 июня 2010

Они в основном одинаковы. Инициализация в объявлении: небольшое преимущество в том, что вам не нужно беспокоиться о нескольких конструкторах. С другой стороны, у вас немного меньше гибкости, особенно если вам нужна логика или обработка исключений.

http://java.sun.com/docs/books/tutorial/java/javaOO/initial.html

1 голос
/ 08 июня 2010

Нет (реальной) разницы в уровне байтового кода. Это больше вопрос стиля кодирования.

Божо дал хороший ответ на аналогичный вопрос здесь .

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