Java main() 方法

2025年7月21日 | 阅读 7 分钟

在 Java 中,main() 方法是任何独立 Java 应用程序的关键入口点。当 Java 程序运行时,Java 虚拟机 (JVM) 会查找 main() 方法来启动执行。此方法必须遵循严格的签名才能被 JVM 识别。没有 main() 方法,JVM 将不会执行程序。理解 main() 方法对任何 Java 开发人员来说都至关重要,因为它充当了程序与 JVM 提供的底层执行环境之间的链接。

语法

Java Main Method

在 Java 程序中使用 main() 方法

示例

编译并运行

输出

Hello, World!

public: 这是一个访问修饰符。我们应该始终将 main() 方法声明为 public,因为 JVM 可以识别程序的执行点。如果我们使用 private、protected 和 default 在 main() 方法之前,它将对 JVM 不可见。例如,请看以下 Java 程序。

示例

输出

Error: Main method not found in class Main, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

static: 我们可以使用 static 关键字使方法成为静态的。我们应该在不创建对象的情况下调用 main() 方法。静态方法是不需要创建对象即可调用的方法,因此我们不需要任何对象来调用 main() 方法。

如果我们尝试运行 main() 方法不是静态的 Java 代码,我们会收到错误。例如,请看以下 Java 程序。

示例

输出

Error: Main method is not static in class Main, please define the main method as:
   public static void main(String[] args)

void: 在 Java 中,每个方法都有一个返回类型。void 关键字告知编译器 main() 方法不返回任何值。如果我们指定 void 以外的返回类型,如 int,我们会收到错误。例如,请看以下 Java 程序。

示例

输出

Error: Main method must return a value of type void in class Main, please 
define the main method as:
   public static void main(String[] args)

main(): 这是 JVM 中预定义的默认签名。JVM 调用它来逐行执行程序,并在该方法完成后结束执行。我们也可以重载 main() 方法。

如果我们改变启动 main 方法时的名称,我们会收到错误。例如,请看以下 Java 程序。

示例

输出

Error: Main method not found in class Main, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

String args[]: main() 方法还接受用户的一些数据。它接受一组字符串,称为字符串数组。它用于以字符串值的形式保存命令行参数。

这里,agrs[] 是数组名,它是 String 类型。这意味着它可以存储一组字符串。请记住,此数组也可以存储一组数字,但仅以字符串的形式。传递给 main() 方法的值称为参数。这些参数存储在 args[] 数组中,因此通常使用 args[] 这个名称。

示例

编译并运行

输出

Java Main Method

如果 main() 方法在没有 String args[] 的情况下编写会怎样?

程序编译通过,但无法运行,因为 JVM 不识别 main() 方法。请记住,JVM 始终查找带有字符串类型数组作为参数的 main() 方法。

执行过程

首先,JVM 执行静态块,然后执行静态方法,然后创建程序所需的 对象。最后,执行实例方法。JVM 以最高优先级执行静态块。这意味着 JVM 在查找程序中的 main() 方法之前,会先查看静态块。

示例

编译并运行

输出

Static block
Static method

我们观察到 JVM 首先执行静态块(如果程序中存在)。之后,它会搜索 main() 方法。如果找不到 main() 方法,它会报错。

示例

不包含 main() 方法的程序会在运行时报错。

示例

输出

Error: Main method not found in class Main, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

因此,main() 方法应始终这样编写:

我们可以互换 public 和 static 的顺序,写成如下形式:

我们也可以为 String 类型数组使用其他名称,写成如下形式:

编写 main() 方法的不同方式有:

String...args: 它允许方法接受零个或多个参数。String 和数组之间必须有三个点,否则会报错。

没有 main() 方法的 Java 程序

从 JDK 7 开始,无法直接执行没有 main() 方法的独立 Java 程序。Java 虚拟机 (JVM) 会专门查找 public static void main(String[] args) 方法作为程序执行的入口点。如果找不到此方法,JVM 将报告一个错误,指示其缺失。

在 JDK 7 之前,可以通过将代码放在 static 初始化块中来实现不带 main() 方法的某些执行。这些块在类加载时执行,通常在 main() 方法被调用之前。

然而,即使在这种情况下,除非在静态块中显式调用 System.exit(0) 来阻止,否则程序在静态块执行完成后仍会以“未找到 main() 方法”的错误终止。

示例

输出

Main.java:1: error: package javafx.application does not exist
abstract class Main extends javafx.application.Application  

注意:如果要执行上述 Java 程序,请在 JDK 7 或更早版本上运行。

重载 main() 方法

我们也可以重载 main() 方法。我们可以在类中定义任意数量的 main() 方法,但方法签名必须不同。

示例

编译并运行

输出

The main() method invoked
6

Java main() 方法选择题

1. Java 中 main() 方法的正确签名是什么?

  1. public void main(String[] args)
  2. public static void main(String[] args)
  3. static public void main(String args[])
  4. public static int main(String[] args)
 

答案:b)

解释: JVM 查找 public static void main(String[] args) 作为入口点。选项 c 也是有效的(修饰符的顺序无关紧要),但 b 是约定俗成的形式。


2. 为什么 main() 方法声明为 static?

  1. 允许继承
  2. 这样就可以在不创建对象的情况下调用它
  3. 启用方法重载
  4. 提高性能
 

答案:b)

解释: 将 main() 声明为 static 允许 JVM 直接调用它,而无需实例化该类,这对于程序启动至关重要。


3. 如果 main() 方法不是 public 会怎样?

  1. 程序正常运行
  2. 编译错误
  3. 运行时错误
  4. JVM 无法访问该方法
 

答案:d)

解释: JVM 需要从类外部访问 main()。如果它不是 public,就会导致运行时错误:未找到 main 方法。


4. 以下关于 main() 中的 String[] args 的说法哪个是正确的?

  1. 它存储命令行参数
  2. 它必须命名为 args
  3. 它是可选的
  4. 它用于返回值
 

答案:a)

解释: String[] args 包含命令行参数。args 这个名称是惯例,但不是强制性的。


5. Java 中的 main() 方法可以重载吗?

  1. 不行,它必须是唯一的
  2. 可以,但只能使用不同的返回类型
  3. 可以,使用不同的参数列表
  4. 只能在抽象类中
 

答案:c)

解释: 我们可以使用不同的参数列表重载 main(),但只有标准签名会被 JVM 用于启动执行。


下一个主题Java 教程