Имеете другой статический метод в качестве точки входа в программу Java? - PullRequest
1 голос
/ 18 марта 2010

Как все мы знаем, Java-программа начнет выполняться из public static void main(String[] args) метода класса.

Так что было любопытно узнать, есть ли какой-то другой способ, которым мы можем сделать другой статический метод в качестве точки входа, то есть можем ли мы переопределить это свойство JVM, чтобы начать с другого метода, отличного от main?

Ответы [ 3 ]

5 голосов
/ 18 марта 2010

AFAIK JVM всегда начинается с основного метода. Единственная официальная ссылка, которую мне удалось найти, это в разделе 12.1.4 спецификации языка Java , в котором говорится:

12.1.4 Invoke Test.main

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

Метод main должен быть объявлен общедоступный, статичный и недействительный. Это должно принять один аргумент, который является массив строк.

Это не кажется мне ужасным ограничением. Технически можно написать класс «MainSelector», метод main () которого принимает в качестве аргумента командной строки полное имя класса и метода и использует отражение для вызова этого метода.

1 голос
/ 18 марта 2010

Это «возможно», но это зависит от реализации.

Цитата от Спецификация JVM :

Виртуальная машина Java запускается путем создания начального класса, который определяется способом, зависящим от реализации, с помощью загрузчика классов начальной загрузки (§5.3.1). Затем виртуальная машина Java связывает исходный класс, инициализирует его и вызывает метод открытого класса void main(String[]). Вызов этого метода приводит к дальнейшему выполнению. Выполнение инструкций виртуальной машины Java, составляющих основной метод, может вызвать связывание (и, следовательно, создание) дополнительных классов и интерфейсов, а также вызов дополнительных методов.

В в некоторых реализациях виртуальной машины Java начальный класс может * предоставляться в качестве аргумента командной строки, как в JDK версии 1.0 и 1.1. Альтернативно, начальный класс может быть , предоставленным реализацией . В этом случае начальный класс может установить загрузчик классов, который, в свою очередь, загрузит приложение, как в Java 2 SDK, Standard Edition, v1.2. Возможны другие варианты начального класса, если они соответствуют спецификации, приведенной в предыдущем абзаце.

Java 1.6 VM для Windows не обеспечивает эту функцию.

0 голосов
/ 18 марта 2010

Вы всегда можете написать свою собственную JVM (или взять версию с открытым исходным кодом и слегка ее изменить). Но это, вероятно, будет JVM с ошибкой. По крайней мере, я предполагаю, что поведение запуска метода main где-то определено в спецификации языка JVM / Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...