Java程序如何在没有定义main方法的情况下运行?

10

我在查看一些Java源代码时注意到main方法没有定义。

那么Java如何在不知道从何处开始的情况下编译源代码呢?

13个回答

23

main方法只在Java虚拟机执行代码时使用。没有main方法,代码无法执行,但仍然可以编译。

在编译代码时,通常在命令行上指定一组文件,例如:

javac MyClass1.java MyClass2.java
Java编译器(javac)检查每个传递给它的类并将其编译为一个 .class 文件。
Java源代码可能没有main方法的原因之一是设计成作为库使用,而不是被执行。
有趣的是:虽然Java编译器编译源代码时不需要main方法,但是Java编译器本身的源代码确实有一个main方法。

5

运行和编译是有区别的。Java代码可以逐步编译。只需要一个main方法来运行代码。编译器足够聪明,当你编译时,就会安排所有的依赖关系,因此Java“知道从哪里开始”。

如果你正在构建某种标准容器中的Web应用程序,你的代码可能没有main方法。容器有这个方法,但是你只需编写插件组件即可。


2

// 仅适用于Java 1.6或更早版本

public class Test{   
    // this is static block

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

在Java中(运行时):

  1. 所有静态成员都被识别。
  2. 所有变量和方法都被初始化。
  3. 静态块被执行。

“Static members are identified” 是没有意义的;“所有变量都被初始化”是错误的;而“方法被初始化”也是没有意义的。在Java 6及更早版本中,可能包括后续版本,给定输出将会跟随一个 java.lang.NoSuchMethodError 错误,指出找不到 main() 方法。 - user207421

1
Java如何在不知道从哪里开始的情况下运行您的源代码?
我猜你是指运行(而不是编译),因为编译不需要main()。在这种情况下,显式声明的main()方法只是运行程序的多种方式之一。 您可以使用一些框架来执行您的代码。它们有main()(仅针对控制台应用程序),并且只需要您声明一个入口点。例如,这就是运行单元测试的方式。

0

其中一种方法是静态块,但在JDK的早期版本中不包括JDK 1.7。

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

但是我无法在IDE上运行这段代码,右键单击类时没有“运行”按钮出现。 - Hoang Minh Quang FX15045

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

3
你好,coco,欢迎来到Stack Overflow。关于你的第一篇文章,我有一个提示:请考虑添加一些解释性文字,说明这个方法的实现方式和原因,最好附上该方法文档的参考资料。 - zpon

0
这将在没有任何错误和没有main()方法的情况下执行。
abstract class hello extends javafx.application.Application
{
    static 
    {
    System.out.println("without main method");
    System.exit(0);
    }
}

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()函数。


0

是的,我们可以在没有主方法的情况下运行Java程序,为此我们将使用静态函数

以下是代码:

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

这将输出"嗨,看起来程序在没有main()方法的情况下运行"


1
紧接着是一个 java.lang.NoSuchMethodError - user207421

0
我们可以在没有主方法的情况下编译程序。实际运行程序与编译程序是不同的。大多数库都不包含主方法,因此无论程序是否包含主方法,编译都不会有问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接