我正在查看一些Java源代码,并注意到main
方法尚未定义。
Java如何编译源代码而不知道从哪里开始?
答案 0 :(得分:18)
main
方法仅在Java虚拟机执行代码时使用。如果没有main
方法,代码就无法执行,但仍然可以编译。
编译代码时,通常在命令行中指定一组文件,例如
javac MyClass1.java MyClass2.java
Java编译器(javac
)检查您传递给它的每个类,并将其编译为.class文件。
Java源代码可能缺少main
方法的一个原因是因为它被设计为用作库而不是被执行。
你可能会感兴趣的东西:虽然Java编译器编译的源代码不需要main
方法,但source code for the Java compiler itself确实有main
方法。
答案 1 :(得分:4)
运行和编译之间存在差异。 Java代码可以递增编译。您只需要在某处main
运行代码。 Java“知道从哪里开始”,因为编译器足够智能,可以在编译时排列所有依赖项。
实际上,如果您在某种标准容器中构建Web应用程序,那么您的代码可能没有main
方法。容器可以,但你只需编写插入的组件。
答案 2 :(得分:3)
//仅适用于 java 1.6 或更少版本
public class Test{
// this is static block
static{
System.out.println("This is static block");
}
}
在Java中(运行时):
答案 3 :(得分:1)
Java
编译如何运行你的源而不知道在哪里 开始?
我认为你的意思是运行(而不是编译),因为你不需要main()来编译。在这种情况下,显式声明的main()方法只是运行程序的方法之一。 您可以使用一些框架来执行代码。他们有main()(仅讨论控制台应用程序)并要求您仅声明入口点。例如,这是运行单元测试的方法。
答案 4 :(得分:0)
您编写的每个Java类都不是运行的入口点,这就是原因。我会说这是规则而不是例外。
答案 5 :(得分:0)
是的,我们可以在没有main方法的情况下运行java程序,为此我们将使用静态函数
以下是代码:
class Vishal
{
static
{
System.out.println("Hi look program is running without main() method");
}
}
这将输出“Hi look程序正在运行而没有main()方法”
答案 6 :(得分:0)
public class Test{
// this is static block
static{
System.out.println("This is static block");
System.exit(0);
}
}
这将在JDK 1.6或更早版本中正常运行。在1.7及更高版本中,必须包含main()
函数。
答案 7 :(得分:0)
我们可以在没有main方法的情况下编译程序。实际上运行程序与编译程序不同。大多数库不包含main方法。所以对于编译,程序是否包含main方法没有问题。
答案 8 :(得分:0)
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
答案 9 :(得分:0)
其中一种方法是静态阻塞,但在以前版本的JDK中不在JDK 1.7中。
class A3{
static{
System.out.println("static block is invoked");
System.exit(0);
}
}
答案 10 :(得分: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,但仍然无法正常工作
答案 11 :(得分:0)
这将在没有任何错误且没有main()方法的情况下执行
abstract class hello extends javafx.application.Application
{
static
{
System.out.println("without main method");
System.exit(0);
}
}