📅  最后修改于: 2023-12-03 15:09:57.029000             🧑  作者: Mango
Java 程序在执行时首先寻找的是 main() 方法。也就是说,如果没有 main() 方法,程序是无法执行的。但是,我们可以通过其他方式在没有 main() 方法的情况下执行程序。下面介绍两种方法:
Java 程序在加载类时会执行 static 代码块。因此,我们可以通过在类中加入 static 代码块,来执行我们想要执行的程序。
代码片段如下:
public class NoMainMethod {
static {
System.out.println("Hello, world!");
}
}
以上代码中,我们在 NoMainMethod 类中添加了一个 static 代码块,在其中打印了一句 "Hello, world!"。当我们执行该类时,就会输出 "Hello, world!"。
JDK 中提供了一个名为 java.util.ServiceLoader 的工具类。它会在运行时自动搜索并加载我们的服务(Service)。我们可以通过创建一个符合 Service 规范的接口,并在 META-INF/services 目录下创建一个以接口全限定名为名的文件,来让 ServiceLoader 加载我们的服务。当然,在这个过程中我们可以编写任何我们想要执行的程序。
代码片段如下:
创建接口文件,文件名为 com.example.MyService;
在接口文件中添加我们想要执行的程序,代码片段如下:
package com.example;
public interface MyService {
void run();
}
com.example.MyServiceImpl
package com.example;
public class MyServiceImpl implements MyService {
@Override
public void run() {
System.out.println("Hello, world!");
}
}
ServiceLoader<MyService> loader = ServiceLoader.load(MyService.class);
for (MyService myService : loader) {
myService.run();
}
以上代码通过 ServiceLoader 加载实现 MyService 接口的类,并执行对应的 run() 方法。当我们执行该代码时,就会输出 "Hello, world!"。
Java 程序在默认情况下是需要 main() 方法的,但是我们可以通过其他方式,在没有 main() 方法的情况下执行程序。其中,使用 static 代码块可以让我们在类被加载时执行一些程序;使用 JDK 工具类则可以在运行时自动搜索并加载我们想要执行的服务。