Можем ли мы выполнить 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

Ответ 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 должен возвращаться для продолжения последовательности запуска.