{java puzzler} инициализация классов и конструирование объектов





Взяты из The Java Language Specification, "12. Execution"
1. Что напечатает программа?

class Super {
        static { System.out.print("Super "); }
}
class One {
        static { System.out.print("One "); }
}
class Two extends Super {
        static { System.out.print("Two "); }
}
class Test {
        public static void main(String[] args) {
                One o = null;
                Two t = new Two();
                System.out.println((Object)o == (Object)t);
        }
}

Ответ:
«Super Two false»
Объяснение:
Класс One не используется активно, а значит не произойдет линковки с ним.

2. Что напечатает программа?

class Super {
        static int taxi = 1729;
        static { System.out.print("Super "); }
}
class Sub extends Super {
        static { System.out.print("Sub "); }
}
class Test {
        public static void main(String[] args) {
                System.out.println(Sub.taxi);
        }
}

Ответ:
«Super 1729»
Объяснение:
Класс Sub не будет проинициализирован, а ссылка Sub.taxi — это ссылка поле из класса Super.

3. Что напечатает программа?

interface I {
        int i = 1, ii = Test.out("ii", 2);
}
interface J extends I {
        int j = Test.out("j", 3), jj = Test.out("jj", 4);
}
interface K extends J {
        int k = Test.out("k", 5);
}
class Test {
        public static void main(String[] args) {
                System.out.print(J.i + " ");
                System.out.print(K.j + " ");
        }
        static int out(String s, int i) {
                System.out.print(s + "=" + i + " ");
                return i;
        }
}

Ответ:
«1 j=3 jj=4 3 »
Объяснение:
Сначала идет вызов compile-time константы (нет инициализации).
Потом идет обращение к члену интерфейса J — поэтому вызываются статические инициализаторы класса J.

4. Что напечатает программа?

class Super {
        Super() { printThree(); }
        void printThree() { System.out.println("three"); }
}
class Test extends Super {
        int three = (int)Math.PI; // That is, 3
        public static void main(String[] args) {
                Test t = new Test();
                t.printThree();
        }
        void printThree() { System.out.println(three); }
}


Ответ:
«0

Объяснение:
Создаем объект:
1. Конструируем места для переменных, инициализируем значениями по умолчанию для этих типов (для int — 0)
2. Потом вызывается неявный конструктор класса Test, в нём — первым делом конструктор Super.
3. В Java функции виртуальные — а значит, в конструкторе Super будет вызван Tree.printTree.




























Вам это будет интересно!

  • {java puzzlers} Joshua Bloch: Tiger Trap [part II]
  • {java puzzlers} Joshua Bloch: Tiger Trap
  • {java puzzlers} Josh Bloch: Java Puzzlers Epizode VI
  • Post form from java use Socets
  • {java} Java Language Specification
  • Последние новости

    Слово

    Назови человека свиньей, и он захрюкает. Пословица Проживая данную нам жизнь, мы все время находимся в гуще энергий, как положительных, так и отрицательных. По этическим нормам слово обладает определенной силой, следовательно, когда мы клевещем на человека, судим, обзываем, мы «де...
    Читать далее »

    ЭГРЕГОР

    Энергия эгрегора – квантовая структура, которая сформирована мыслями, знаниями и чувствами всего человечества – бывшего, настоящего и будущего. Эгрегор – это квантово лептонная скоррелированная структура, рожденная похожими мы...
    Читать далее »

    Как открыть свои чакры

    Открытие чакр увеличивает поток энергии в теле и вокруг него и, следовательно, улучшает наше физическое, ментальное и эмоциональное здоровье. Представьте себе каждую чакру по очереди. Они вращаются и становятся больше в размере. Начинайте с 1 – й чакры (пусть они вращаются в любую сторону, обычно они вращаются в разные). В то же ...
    Читать далее »

    Смерть или новая жизнь

    Из разговора двух зародышей в утробе матери: – Как ты думаешь, есть ли жизнь после родов? – Не знаю, оттуда еще никто не возвращался… Сравнительно недавно появились сенсационные сообщения доктора Раймонда А. Моуди о том, что ученые зарегистрировали фа...
    Читать далее »

    Чакры

    Чакры являются основными энергетическими органами биополя. Они контролируют нашу деятельность во внешнем мире, а каждая из чакр несет ответственность за определенную сферу деятельности. Основное предназначение их заключается в том, что они несут ответственность за поддержание энергообмена живого организма с окружающей средой через специальные каналы связи. Таким образом, при нарушении процесса энергообмена у нас возникают болезни и проблемы...
    Читать далее »

    Три колонны космоса

    Показания: нарушение обменных процессов, снижение иммунитета, обновление сил. Методика исполнения. Средний и сердечный пальцы правой руки кладут на аналогичные пальцы левой руки. Мизинец левой руки кладут возле основания тыльной поверхности среднего и безымянного пальцев правой руки, затем все фиксируется мизинцем правой руки. Кон...
    Читать далее »

    Заключение

    Лучше зажечь свечу, чем проклинать сгущающуюся тьму. Дзенское изречение Вот и написана книга. Мне хочется верить, что вам она обязательно поможет в познании себя, утверждении своего «Я», определении своего места во Вселенной. На ум приходит китайская пословица: «Если не менять направление, мы наверняка достигнем того, к чему идем». А мы идем к Свету, Добру и Счастью. Мы ...
    Читать далее »