Можем ли мы выполнить java-программу без метода main()?
По моим сведениям, мы не можем выполнить без основного метода, потому что при запуске java-программы. java Виртуальная машина ищет основной метод .if JVM не смог найти основной метод, который покажет вам ошибку времени выполнения. Исключение в основной теме потока не может найти основной класс.
Но я искал много блогов, и некоторые из них говорят, да, это можно сделать через статические блоги, если в java-программе есть статический блок, загрузчик классов загружает весь статический блок, прежде чем java даст вызов main() метод!.
Возможно ли это, и какова будет их использование.
Ответы
Ответ 1
Теперь - нет
До Java 7:
Да, последовательность выглядит следующим образом:
- jvm загружает класс
- выполняет статические блоки
- ищет основной метод и вызывает его
Итак, если код в статическом блоке, он будет выполнен. Но нет смысла делать это.
Как проверить это:
public final class Test {
static {
System.out.println("FOO");
}
}
Затем, если вы попытаетесь запустить класс (либо в командной строке формы с помощью java Test
, либо с помощью IDE), результат:
FOO
java.lang.NoSuchMethodError: main
Ответ 2
поскольку вы отметили Java-ee, а затем YES.
а также в ядре ядра можно использовать статические блоки
и проверьте Как запустить программу Java без основного метода?
Edit:
Как уже указывалось в других ответах - это не поддержка Java 7
Ответ 3
Да Вы можете скомпилировать и выполнить без основного метода. Используя статический блок.
Но после того, как статический блок будет выполнен (напечатан), вы получите сообщение об ошибке, если не найден основной метод.
И последняя информация → ВЫ НЕ МОЖЕТЕ Сделать это с версией JAVA 7. IT не будет выполняться.
{
static
{
System.out.println("Hello World!");
System.exit(0); // prevents "main method not found" error
}
}
Но это не будет выполняться с версией JAVA 7.
Ответ 4
Вы также должны выполнить аналогичную вещь, используя метод premain Java-агента.
манифест файла JAR агента должен содержать атрибут Premain-Class. Значение этого атрибута - это имя класса агента. Класс агента должен реализовывать общедоступный статический метод premain, аналогичный принципу для основной точки входа приложения. После инициализации виртуальной машины Java (JVM) каждый метод premain будет вызываться в том порядке, в котором указаны агенты, затем будет вызван основной метод приложения. Каждый метод premain должен возвращаться для продолжения последовательности запуска.