Я просматривал некоторый источник Java и заметил, что метод main
не определен.
Как Java компилирует исходный код, не зная, с чего начать?
Я просматривал некоторый источник Java и заметил, что метод main
не определен.
Как Java компилирует исходный код, не зная, с чего начать?
Метод main
используется только тогда, когда виртуальная машина Java выполняет ваш код. Код не может быть выполнен без метода main
, но он все еще может быть скомпилирован.
При компиляции кода обычно указывается набор файлов в командной строке, например.
javac MyClass1.java MyClass2.java
Компилятор Java (javac
) проверяет каждый класс, который вы передали ему, и компилирует его в файл .class.
Одна из причин, по которой исходный код Java может отсутствовать, метод main
заключается в том, что он предназначен для использования в качестве библиотеки вместо выполнения.
Что-то, что вам может показаться интересным: хотя исходный код, скомпилированный компилятором Java, не нуждается в методе main
, исходный код для самого компилятора Java имеют метод main
.
Существует разница между запуском и компиляцией. Код Java может быть скомпилирован постепенно. Вам нужно только main
, чтобы запустить код. Java "знает, с чего начать", потому что компилятор достаточно умен, чтобы упорядочить все зависимости при компиляции.
Действительно, если вы создаете веб-приложение в каком-то стандартном контейнере, ваш код, вероятно, не будет иметь метод main
. Контейнер, но вы просто пишете компоненты, которые подключаются.
//работает только с java 1.6 или менее версиями
public class Test{
// this is static block
static{
System.out.println("This is static block");
}
}
В Java (во время работы):
как Java
compileзапускает ваш источник, не зная, где начать?
Я предполагаю, что вы имели в виду run (вместо компиляции), так как вам не требуется компиляция main(). В этом случае явно объявленный метод main() является лишь одним из способов запуска программы. Вы можете использовать некоторые фреймворки для выполнения кода. У них есть main() (только для консольных приложений), и вам требуется объявить только точку входа. Например, вы запускаете модульные тесты.
Каждый отдельный класс Java, который вы пишете, не является точкой входа для запуска, поэтому. Я бы сказал, что правило, а не исключение.
Да, мы можем запустить java-программу без основного метода, для этого мы будем использовать статическую функцию
Ниже приведен код:
class Vishal
{
static
{
System.out.println("Hi look program is running without main() method");
}
}
Это выведет "Привет, программа просмотра работает без метода main()"
public class Test{
// this is static block
static{
System.out.println("This is static block");
System.exit(0);
}
}
Это будет отлично работать в JDK версии 1.6 или ранее. В версии 1.7 и более поздних версиях необходимо включить функцию main()
.
Мы можем скомпилировать программу без основного метода. Фактически запуск программы отличается от ее компиляции. Большинство библиотек не содержат основного метода. поэтому для компиляции нет проблемы, содержит ли программа основной метод или нет.
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
Один из способов - это статический блок, но в предыдущей версии JDK не в JDK 1.7.
class A3{
static{
System.out.println("static block is invoked");
System.exit(0);
}
}
Если вы также не хотите использовать статический блок, это можно сделать следующим образом.
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, который все еще не работает
Это будет выполняться без каких-либо ошибок и без метода main()
abstract class hello extends javafx.application.Application
{
static
{
System.out.println("without main method");
System.exit(0);
}
}