Java 中 main() 方法的有效变体

2024年9月10日 | 阅读 6 分钟

main 方法是执行 Java 代码的起点。如果 JVM 在运行时找不到 main 方法,将会抛出运行时异常。换句话说,如果 Java 代码中没有 main 方法,JVM 将会在运行时报告错误。

  • main() 方法中的 public 访问修饰符允许 JVM 在程序的任何位置执行该方法。
  • main() 方法声明中的 static 关键字允许在不创建类对象的情况下调用该方法。
  • void 返回类型指定 main() 方法不返回任何值。
  • main() 方法的名称由 JVM 配置,并且必须始终命名为 main()。
  • main() 方法中的 String[] 参数允许程序接受程序执行时传递的命令行参数。
  • String 数组参数的名称通常是 args,它指的是包含命令行参数的 String 对象数组。

虽然 Java main() 方法的语法通常很严格,但允许进行一些小的修改。这些修改不会导致运行时异常。因此,Java main() 方法存在多种有效的变体。理解这些变体至关重要,因为它们允许开发人员稍微修改标准语法以适应其特定需求。

默认原型

以下是编写 Java main() 方法的标准且广为接受的方式。

文件名: Computer.java

输出

Welcome

修饰符的顺序

main() 方法声明中的 static 和 public 修饰符可以互换使用,而不会影响程序的行为。

文件名: Computer.java

输出

Welcome

String 数组参数的变体

在 Java 中,在声明 main() 方法的 String 参数时,可以将方括号放在不同的位置。

文件名: Computer.java

输出

Welcome

文件名: Computer.java

输出

Welcome

文件名: Computer.java

输出

Welcome

Args 或任何内容

在 Java main() 方法中,您可以使用任何有效的 Java 标识符代替 args,例如您的名字、公司名称或任何其他遵循 Java 标识符规则的单词或短语。

文件名: Computer.java

输出

Welcome

使用 Var-args 而非 String 数组

在 Java 中,main() 方法可以声明为具有可变长度参数(varargs),而不是 String 数组。这为处理命令行参数提供了更大的灵活性。

在 Java 中,如果 main() 方法中的 String 参数是--维数组,则可以使用 varargs 参数(用三个点 ... 表示而不是方括号 [])进行替换。

文件名: MainMethodDemo.java

输出

Number of arguments: 0

final 修饰符 String 参数

在 Java 中,可以将 main() 方法中的 String[] args 参数声明为 final,以确保参数的值不能被更改。

文件名: MainMethodDemo.java

输出

Arguments:

final main 方法

在 Java 中,可以将 final 关键字应用于 main() 方法,以防止该方法在任何子类中被重写。可以声明带 final 关键字的 main() 方法,这不会影响程序的执行或导致任何错误。

文件名: DemoExample.java

输出

It is a final main method

synchronized 关键字用于 static main 方法

可以在 Java 中声明 main() 方法为 synchronized。

文件名: ComputerDemo.java

输出

Synchronized Main Method

strictfp 关键字用于 static main 方法

在 Java 中,strictfp 关键字确保不同平台之间一致的浮点运算。

文件名: DemoStrictfp.java

输出

x + y = 1.0

重载 main 方法

我们可以像重载其他方法一样重载 Java 中的 main() 方法。重载是指创建名称相同但参数不同的多个方法。我们可以有任意数量的重载 main() 方法,但签名 public static void main(String[] args) 的方法将是程序的入口点。

文件名: MainOverloading.java

输出

It is the main() method with String[] argument

main 方法的继承

在 Java 中,只要方法签名保持不变,您就可以将 main() 方法从超类继承到子类。如果子类没有定义自己的 main() 方法,它将继承其超类的 main() 方法。如果子类定义了自己的 main() 方法,它将重写其超类的 main() 方法。JVM 会无错误地执行 main()。

文件名: Animal.java

输出

It is the main method of the Animal class

main() 方法的隐藏,而非重写

在 Java 中,可以使用方法隐藏在子类中“隐藏”父类的 main 方法,但由于它是 static 方法,因此无法重写。以下是 main() 方法隐藏的示例:

文件名: Animal.java

输出

It is the main method of the Animal class