Как работают программы Java без определения основного метода?

Я просматривал некоторый источник Java и заметил, что метод main не определен.

Как Java компилирует исходный код, не зная, с чего начать?

Ответ 1

Метод main используется только тогда, когда виртуальная машина Java выполняет ваш код. Код не может быть выполнен без метода main, но он все еще может быть скомпилирован.

При компиляции кода обычно указывается набор файлов в командной строке, например.

javac MyClass1.java MyClass2.java

Компилятор Java (javac) проверяет каждый класс, который вы передали ему, и компилирует его в файл .class.

Одна из причин, по которой исходный код Java может отсутствовать, метод main заключается в том, что он предназначен для использования в качестве библиотеки вместо выполнения.

Что-то, что вам может показаться интересным: хотя исходный код, скомпилированный компилятором Java, не нуждается в методе main, исходный код для самого компилятора Java имеют метод main.

Ответ 2

Существует разница между запуском и компиляцией. Код Java может быть скомпилирован постепенно. Вам нужно только main, чтобы запустить код. Java "знает, с чего начать", потому что компилятор достаточно умен, чтобы упорядочить все зависимости при компиляции.

Действительно, если вы создаете веб-приложение в каком-то стандартном контейнере, ваш код, вероятно, не будет иметь метод main. Контейнер, но вы просто пишете компоненты, которые подключаются.

Ответ 3

//работает только с java 1.6 или менее версиями

public class Test{   
    // this is static block

    static{
        System.out.println("This is static block");  
    }
}

В Java (во время работы):

  • идентифицируются все статические элементы.
  • все переменные и методы инициализируются
  • выполняется статический блок

Ответ 4

как Java compile запускает ваш источник, не зная, где начать?

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

Ответ 5

Каждый отдельный класс Java, который вы пишете, не является точкой входа для запуска, поэтому. Я бы сказал, что правило, а не исключение.

Ответ 6

Да, мы можем запустить java-программу без основного метода, для этого мы будем использовать статическую функцию

Ниже приведен код:

class Vishal
{
    static
    {
        System.out.println("Hi look program is running without main() method");
    }
}

Это выведет "Привет, программа просмотра работает без метода main()"

Ответ 7

public class Test{   
    // this is static block

    static{
        System.out.println("This is static block");  
        System.exit(0);
    }
}

Это будет отлично работать в JDK версии 1.6 или ранее. В версии 1.7 и более поздних версиях необходимо включить функцию main().

Ответ 8

Мы можем скомпилировать программу без основного метода. Фактически запуск программы отличается от ее компиляции. Большинство библиотек не содержат основного метода. поэтому для компиляции нет проблемы, содержит ли программа основной метод или нет.

Ответ 9

package com.test;

public class Test {
    static {
        System.out.println("HOLAAAA");
        System.exit(1);
    }
}

//by coco
//Command line:
//java -Djava.security.manager=com.test.Test

Ответ 10

Один из способов - это статический блок, но в предыдущей версии JDK не в JDK 1.7.

class A3{  
  static{  
  System.out.println("static block is invoked");  
  System.exit(0);  
  }  
}  

Ответ 11

Если вы также не хотите использовать статический блок, это можно сделать следующим образом.

public class NoMain {

    private static final int STATUS = getStatus();

    private static int getStatus() {
        System.out.println("Hello World!!");
        System.exit(0);
        return 0;
    }

}

Однако, обратите внимание, что это для версии Java 6. Он не работает в Java 7, который, как говорят, поддерживается на Java 8. Я пытался с JDK 1.8.0_77-b03, который все еще не работает

Ответ 12

Это будет выполняться без каких-либо ошибок и без метода main()

abstract class hello extends javafx.application.Application
{
    static 
    {
    System.out.println("without main method");
    System.exit(0);
    }
}