为什么java(>=7版本)不支持没有main方法的运行程序?
Why java (>=7 version) does not support to run program without main method?
class WithoutMain {
static
{
System.out.println("Without main class!!!");
System.exit(0);
}
}
当我尝试在 java 大于 7 的版本中 运行 以上代码时,出现以下错误。
程序编译成功,但是没有找到mainclass。 Main class 应该包含方法:public static void main (String[] args).
有人可以指导我为什么 Java 不支持在 java7
之后没有主程序的 运行 程序
静态部分
static
{
System.out.println("Without main class!!!");
System.exit(0);
}
会在每次 JVM 加载内存中的 class 时执行,但是如果你想启动一个 java 应用程序,你将需要一个 main 方法,因为它是每个 java 应用程序,如果你不定义它,那么 JVM 将不知道从哪里开始。
您可以扩展您的代码并执行以下操作:
class WithoutMain {
static
{
System.out.println("Static section!!");
}
public static void main(String[] args){
System.out.println("Main class!!!");
}
}
并且输出将首先是静态部分,然后是您在 main 方法中定义的代码。
每次启动 JVM 并加载 class 时,静态方法都会与 class 一起加载,但在 JVM 内部没有调用它或输出其内容的任何内容。作为每一种语言(我知道),你需要一个处理程序来处理你的参数,在 Java 的情况下,它是 main()
方法。
据我所知,此更改特定于 Java 7。在 Java 8 中,您可以执行此操作。您不能在 Java 7 中执行此操作,因为它会在不首先加载 class 的情况下查找方法,但失败了。无论如何,它已在 Java 8.
中改回
public class Main {
static {
System.out.println("Without main class!!! with " + System.getProperty("java.version"));
System.exit(0);
}
}
打印
Without main class!!! with 1.8.0_66
注意:这会终止整个程序。如果你想让程序在没有 main 的情况下保持 运行,你可以这样做
public class Main {
static {
// do something which starts threads
System.out.println("Without main class!!! with " + System.getProperty("java.version"));
if (true)
throw new ThreadDeath();
}
}
这将防止出现错误消息,但如果有非守护线程,则保留后台线程 运行。
class WithoutMain {
static
{
System.out.println("Without main class!!!");
System.exit(0);
}
}
当我尝试在 java 大于 7 的版本中 运行 以上代码时,出现以下错误。 程序编译成功,但是没有找到mainclass。 Main class 应该包含方法:public static void main (String[] args).
有人可以指导我为什么 Java 不支持在 java7
之后没有主程序的 运行 程序静态部分
static
{
System.out.println("Without main class!!!");
System.exit(0);
}
会在每次 JVM 加载内存中的 class 时执行,但是如果你想启动一个 java 应用程序,你将需要一个 main 方法,因为它是每个 java 应用程序,如果你不定义它,那么 JVM 将不知道从哪里开始。
您可以扩展您的代码并执行以下操作:
class WithoutMain {
static
{
System.out.println("Static section!!");
}
public static void main(String[] args){
System.out.println("Main class!!!");
}
}
并且输出将首先是静态部分,然后是您在 main 方法中定义的代码。
每次启动 JVM 并加载 class 时,静态方法都会与 class 一起加载,但在 JVM 内部没有调用它或输出其内容的任何内容。作为每一种语言(我知道),你需要一个处理程序来处理你的参数,在 Java 的情况下,它是 main()
方法。
据我所知,此更改特定于 Java 7。在 Java 8 中,您可以执行此操作。您不能在 Java 7 中执行此操作,因为它会在不首先加载 class 的情况下查找方法,但失败了。无论如何,它已在 Java 8.
中改回public class Main {
static {
System.out.println("Without main class!!! with " + System.getProperty("java.version"));
System.exit(0);
}
}
打印
Without main class!!! with 1.8.0_66
注意:这会终止整个程序。如果你想让程序在没有 main 的情况下保持 运行,你可以这样做
public class Main {
static {
// do something which starts threads
System.out.println("Without main class!!! with " + System.getProperty("java.version"));
if (true)
throw new ThreadDeath();
}
}
这将防止出现错误消息,但如果有非守护线程,则保留后台线程 运行。