2010-06-08 3 views
2

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

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

public class Model{ 
    Object testobject; 

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

} 

VS

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

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

    public Model(){ 
    } 

} 
+0

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

+0

результат идентичный –

+0

uhm извините за слова XD –

ответ

4

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

testObject = new Object(); 

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

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

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

1

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

Божо дал хороший ответ на similar question here.

3

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

1

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

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

1

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

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

3

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

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

+0

Порядок исполнения - это разница, но я не думаю, что это может иметь значение. Я чувствую, что если у вас разные результаты, переместив это, вы, вероятно, пишете плохой код. Есть ли у вас реальный жизненный опыт с кодом, где это действительно важно по уважительной причине? – Koen

+0

@ Koen - Нет, и я не пытался сказать, что знаю. Я просто хотел указать, что порядок выполнения может быть значительным. Люди пишут плохой код. –

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