Каков результат компиляции и выполнения программы (JDK до версии 6 включительно), если стартовым классом считать MainClass?

public class MainClass {
    static {
        MyClass m = new MyClass();                  // 1
        System.out.println(m.toString());           // 2
        System.exit(0);
    }
}

class MyClass {
    public String toString() {
        return "MyClass";
    }    
}
Explanation
В Java 6 запуск класса происходит в следующей последовательности:
1) Происходит загрузка класса MainClass;
2) Выполняется инициализация класса, при этом выполненяются блоки статической инициализации;
3) И после этого JVM могла бы попытаться вызвать метод main(), которого в классе MainClass нет. Но в статическом блоке уже произошло завершение программы вызовом System.exit(0).

В Java 7 последовательность действий немного изменилась – резолвинг метода main выполняется до инициализации класса. Поэтому сразу выбрасывается NoSuchMethodException, в обработчике которого выводится сообщение
Error: Main method not found in class MainClass, please define the main method as:
public static void main(String[] args)

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Java
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты