Рубрики

Вывод программы Java | Набор 3

Прогнозировать вывод следующих программ Java:

// имя файла: Test.java

class Test {

    int x  = 10;  

    public static void main(String[] args) {    

         Test t = new Test();

         System.out.println(t.x);

    }

}

Программа работает нормально и печатает 10. В отличие от C ++, в Java члены могут инициализироваться с объявлением класса. Эта инициализация работает хорошо, когда значение инициализации доступно, и инициализация может быть помещена в одну строку (см. Это для более подробной информации). Например, следующая программа также отлично работает.

// имя файла: Test.java

class Test {    

    int y = 2;

    int x  = y+2;  

    public static void main(String[] args) {    

         Test m = new Test();

         System.out.println("x = " + m.x + ", y = " + m.y);

    }

}

Выход вышеуказанной программы: «x = 4, y = 2». Сначала инициализируется y, затем x инициализируется как y + 2. Таким образом, значение x становится 4.

Что происходит, когда член инициализируется в объявлении класса и в конструкторе? Рассмотрим следующую программу.

// имя файла: Test.java

public class Test 

{    

    int x = 2;

    Test(int i) { x = i; } 

    public static void main(String[] args) {    

         Test t = new Test(5);

         System.out.println("x = " + t.x);

    }

}

Выход вышеуказанной программы: «x = 5». Инициализация с объявлением класса в Java подобна инициализации с использованием списка инициализаторов в C ++. Таким образом, в приведенной выше программе значение, присвоенное внутри конструктора, перезаписывает предыдущее значение x, равное 2, и x становится 5.

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

// имя файла: Test2.java

class Test1 {   

    Test1(int x) {

        System.out.println("Constructor called " + x);

    }

}

   
// Этот класс содержит экземпляр Test1

class Test2 {    

    Test1 t1 = new Test1(10);   

   

    Test2(int i) { t1 = new Test1(i); } 

   

    public static void main(String[] args) {    

         Test2 t2 = new Test2(5);

    }

}

Результатом программы является конструктор, называемый 10, конструктор, называемый 5.
Первый объект t2 создается в основном методе. Поскольку порядок инициализации локальных переменных предшествует конструктору, сначала переменная экземпляра (t1) в классе Test2 выделяется памяти. В этой строке создается новый объект Test1, конструктор вызывается в классе Test1 и печатается «Конструктор с именем 10». Затем вызывается конструктор Test2 и снова создается новый объект класса Test1 и печатается «Конструктор с именем 5».

Пожалуйста, пишите комментарии, если вы найдете какие-либо ответы / объяснения неправильными или хотите поделиться дополнительной информацией по темам, обсужденным выше.

Рекомендуемые посты:

Вывод программы Java | Набор 3

0.00 (0%) 0 votes