2016-06-10 4 views
0

Я только что узнал об блоке init. Я знаю, что оба (конструкторнестатический блок init) могут использоваться для инициализации членов класса. Итак, я хотел бы знать, какой из двух является лучше/more_useful для инициализации членов класса, и что является причиной для него. Я прочитал Use of Initializers vs Constructors in Java, но я не думаю, что это ответ на мой вопросКонструктор против блока нестатического инициализации

Примечания (если было пропустить что-нибудь в этом вопросе, то пожалуйста, укажите это и объяснить это в простых словах.): Я прошу инициализацию нестатические элементы только.

Thankyou в Advance

+3

Также этот: http://stackoverflow.com/questions/1355810/how-is-an-instance-initializer-different- от-a-constructor – Tunaki

+0

@ Энди, пожалуйста, помогите мне указать вне строки, которая ответит на мой вопрос bcz. Я не могу найти его –

+1

Могу ли я указать «линия»? Нет - это не простой вопрос, и ответы (как в том дубликате, который я обозначил, так и в предположении Тунаки) соответственно длинны. Лучший способ я могу обобщить это: «использовать конструктор по умолчанию, только подумайте, чтобы использовать инициализатор экземпляра, если вы обнаружите, что вам это действительно нужно». –

ответ

0

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

public class test{ 
    int i;//you want to initialize i to 100 when any object is created then go for non static 
    { 
     i=10; 
    } 
    test(){} 
    test(int x) 
    { 
    } 
    test(String y) 
    { 
    } 

    public static void main(String args[]) 
    { 
     test t=new test();// i will be 10 during this 
     // 
     test t1=new test("hello");// if you call this constructor also i will be 10 
     // 
     test t2=new test(10);// even if you call this constructor i will be 10 
    } 

Если вы хотите инициализировать в конструкторах то будет код дублирования

public class test{ 
    int i;//there will be code duplication if you initialize in constructors 


    test(){i=10;} 
    test(int x) 
    { 
     i=10; 
    } 
    test(String y) 
    { 
     i=10; 
    } 

    public static void main(String args[]) 
    { 
     test t=new test();// i will be 10 during this 
     // 
     test t1=new test("hello");// if you call this constructor also i will be 10 
     // 
     test t2=new test(10);// even if you call this constructor i will be 10 
    } 

Опять это будет проблемой, если вы хотите инициализировать I 100, то вы должны изменить в все конструкторы, но если вы идете на нестационарный путь, то вы должны изменить только в одном месте

+0

«много вещей» вы имеете в виду каждый отдельный объект, который я создаю из моего класса, и есть ли у нас какие-либо другие причины для блока init? –

+0

@PrayagSharma Прочтите обновленный ответ – SpringLearner

+0

Я не совсем согласен с тем, что «будет дублирование кода»: конструктор может вызывать другие конструкторы. – TmTron