Java 主方法(Main Method)

更新于 2025-12-25

Jakob Jenkov 2020-02-21

Java 程序是一系列按照特定顺序执行的 Java 指令。由于这些指令是按顺序执行的,因此 Java 程序有明确的开始和结束。

要运行你的 Java 程序,你需要告诉 Java 虚拟机(JVM)从哪里开始执行。在 Java 中,所有的代码都必须位于 Java 类 内部。类是一种将相关数据和指令组合在一起的方式。因此,一个类可以包含 变量方法。变量用于存储数据,而方法则将一组对数据进行操作的指令组合在一起。如果你现在还不完全理解这些概念,不用担心,后续内容会详细解释。


一个简单的 Java 类声明

下面是一个不包含任何变量、方法或其他指令的简单 Java 类声明:

public class MyClass {}

这段 Java 代码必须保存在一个与类名相同、并以 .java 为后缀的文件中。具体来说,文件名必须是 MyClass.java。一旦文件名与类名匹配且以 .java 结尾,你就可以使用 Java SDK 中的编译器进行编译,或者更方便地,在 Java IDE 中完成编译。

建议将你的类放在一个 Java 包(package) 中。Java 包本质上就是文件系统中的一个目录,可以包含一个或多个 Java 文件。包可以像目录一样嵌套。例如,你可以创建一个名为 myjavacode 的包,它对应于硬盘上的一个名为 myjavacode 的目录。

如果你将 Java 类放在一个包中,就必须在 Java 文件顶部指定包名。以下是前面那个类加上包声明后的样子:

package myjavacode;

public class MyClass {}

注意:此时 MyClass.java 文件必须位于 myjavacode 目录下,并且文件内部必须包含 package myjavacode; 声明。仅仅把文件放在正确的目录中,或者只在文件中写包声明,都是不够的——两者缺一不可。


main() 方法

Java 程序需要一个起点来开始执行。Java 程序通过执行某个类中的 main 方法来启动。你可以选择要执行的类,但不能更改方法的名称——该方法必须始终命名为 main

以下是将 main 方法添加到之前类中的示例:

package myjavacode;

public class MyClass {
    public static void main(String[] args) {
    }
}

这里的三个关键字 publicstaticvoid 具有特殊含义。目前你不需要深究它们的作用,只需记住:main() 方法的声明必须包含这三个关键字。

在三个关键字之后是方法名。回顾一下,方法是一组可以被当作单一操作来执行的指令。通过“调用”(即执行)一个方法,就能运行该方法内部的所有指令。

方法名后面首先是左括号 (,然后是一组参数列表。参数是可以传递给方法的变量(数据/值),方法内部的指令可以利用这些参数来定制其行为。main 方法必须始终接收一个 String 对象数组作为参数。

声明一个 String 数组的方式如下:

String[] stringArray

暂时不必担心 String数组(array) 是什么,这些会在后续章节中详细讲解。另外,参数的名字可以自由选择。在前面的 main() 示例中,我使用了 args,而在另一个例子中用了 stringArray,这完全取决于你。

在方法参数列表之后,首先是左花括号 {,接着是一些空白区域,最后是右花括号 }。花括号之间的部分称为方法体,用于放置当 main 方法被调用时要执行的 Java 指令。上面的例子中方法体为空,没有任何指令。

现在我们在 main 方法体中加入一条指令:

package myjavacode;

public class MyClass {
    public static void main(String[] args) {
        System.out.println("Hello World, Java app");
    }
}

这条指令:

System.out.println("Hello World, Java Program");

会将文本 Hello World, Java Program 打印到控制台。如果你从命令行运行 Java 程序,就会在命令行窗口中看到输出;如果你在 IDE 中运行程序,IDE 通常会捕获所有控制台输出并在其界面中显示出来。


运行 main() 方法

通常,你会通过命令行(控制台)来启动 Java 程序。你调用 JRE 自带的 java 命令,并告诉它要执行哪个 Java 类,以及要传递给 main() 方法的参数。Java 应用程序随后在 JVM 中执行(也有人认为是由 JVM 执行)。

命令行执行 java 命令,进而运行 Java 主程序。以下是一个具体的命令行示例:

java -cp classes myjavacode.MyClass
  • 第一部分是 java 命令,用于启动 JVM。在某些情况下,你可能需要指定 java 命令在计算机上的完整路径(通常位于 Java 安装目录的 bin 子目录中)。
  • 第二和第三部分(-cp classes)告诉 JVM 编译后的 Java 类位于哪个目录(cp 表示 class path,即类路径)。这里假设编译后的类位于名为 classes 的目录中。
  • 第四部分是要执行的 Java 类的名称。注意,这里使用的是全限定类名,即包含了包名 myjavacode.MyClass

向 main() 方法传递参数

你可以从命令行向 main() 方法传递参数。例如:

java -cp classes myjavacode.MyClass Hello World

当 JVM 执行 myjavacode.MyClassmain() 方法时,传入的 String 数组参数将包含两个字符串:"Hello""World"

main() 方法可以通过如下方式访问这些参数:

package myjavacode;

public class MyClass {
    public static void main(String[] args) {
        System.out.println(args[0]);
        System.out.println(args[1]);
    }
}

注意对数组元素 args[0]args[1] 的引用:

  • args[0] 将包含字符串 "Hello"
  • args[1] 将包含字符串 "World"

关于 Java 源代码的编译和运行,详见文章:Java 项目概述、编译与执行

变量和数组将在后续章节中详细讲解。如果你现在还不完全理解,不必担心。


Java 主类(Main Class)

如果你的 Java 程序中只有一个类包含 main() 方法,那么这个类通常被称为主类

你可以在项目中拥有任意多个包含 main() 方法的类。但是,Java 虚拟机每次只能被指示运行其中一个。你仍然可以从 JVM 所执行的那个 main() 方法中调用其他类的 main() 方法(尽管你还没学到如何做),也可以启动多个 JVM 实例,每个实例分别执行一个 main() 方法。