杰瑞科技汇

java 调用 main 方法

  1. main 方法的标准签名:为什么它必须是 public static void main(String[] args)
  2. 两种主要的调用方式
    • 从命令行调用(最常见)
    • 在代码中调用(用于测试或特定场景)
  3. 调用时的参数传递
  4. 一个完整的示例

main 方法的标准签名

在 Java 中,当我们说“程序的入口点”时,指的就是 main 方法,为了让 Java 虚拟机(JVM)能够找到并执行这个方法,它必须遵循一个非常严格的格式,这个格式被称为“方法签名”。

public static void main(String[] args)

我们来分解一下这个签名中的每个关键字:

  • public: 访问修饰符,它意味着 main 方法是公开的,任何类都可以访问它,这是 JVM 的要求,JVM 需要能够从外部调用这个方法。
  • static: 关键字,它意味着 main 方法属于类(class),而不是属于这个类的某个具体实例(对象),我们不需要创建类的对象就可以直接调用它,这同样是为了方便 JVM,因为 JVM 在启动程序时,还没有创建任何对象。
  • void: 返回类型,它表示 main 方法在执行完毕后不返回任何值,程序的开始和结束由 JVM 管理,不需要 main 方法返回一个状态码(尽管可以通过 System.exit(int code) 来退出程序并返回状态码)。
  • main: 方法名,这是 JVM 约定的固定名称,它会寻找一个名为 main 的方法作为程序的入口。
  • String[] args: 参数列表。
    • args 是参数的名称,你可以换成任何合法的变量名,parametersinputArgs,但 args 是约定俗成的,大家都会用。
    • String[] 表示这是一个字符串类型的数组,这个数组用于接收在命令行运行程序时传入的参数。

两种主要的调用方式

从命令行调用(最常见)

这是运行 Java 程序的标准方式,你需要先编译代码,然后使用 java 命令来运行。

步骤:

  1. 编写代码:创建一个 Java 文件,MyProgram.java

    // MyProgram.java
    public class MyProgram {
        public static void main(String[] args) {
            System.out.println("Hello, World!");
            System.out.println("接收到的参数个数: " + args.length);
            // 遍历并打印所有传入的参数
            for (int i = 0; i < args.length; i++) {
                System.out.println("参数 " + (i + 1) + ": " + args[i]);
            }
        }
    }
  2. 编译代码:打开终端(或命令提示符),导航到文件所在的目录,然后使用 javac 命令进行编译。

    javac MyProgram.java

    执行后,会生成一个 MyProgram.class 文件。

  3. 运行程序:使用 java 命令来运行编译后的类。

    java MyProgram

    输出:

    Hello, World!
    接收到的参数个数: 0
  4. 传递参数运行:我们在运行程序时传入一些参数,参数之间用空格隔开。

    java MyProgram "Java调用main方法" "第二个参数" 123

    输出:

    Hello, World!
    接收到的参数个数: 3
    参数 1: Java调用main方法
    参数 2: 第二个参数
    参数 3: 123

    注意

    • java 命令后面跟的是类名MyProgram),而不是文件名(MyProgram.class)。
    • 传递的参数会自动被解析成字符串数组 args

在代码中调用

特别是在单元测试或者某些特定框架中,你可能需要在另一个 Java 类的代码中显式地调用 main 方法。

核心要点: 因为 main 方法是 static 的,所以你可以直接通过 类名.main() 的方式来调用它,而无需创建类的实例。

示例:

我们修改上面的 MyProgram.java,并创建一个新的 Caller.java 文件来调用它。

MyProgram.java (保持不变)

public class MyProgram {
    public static void main(String[] args) {
        System.out.println("--- MyProgram 的 main 方法被调用了 ---");
        System.out.println("接收到的参数个数: " + args.length);
        for (int i = 0; i < args.length; i++) {
            System.out.println("参数 " + (i + 1) + ": " + args[i]);
        }
    }
}

Caller.java (新的调用类)

public class Caller {
    public static void main(String[] args) {
        System.out.println("这是 Caller 类的 main 方法。");
        System.out.println("我将调用 MyProgram 的 main 方法。");
        // 创建一个字符串数组,作为要传递给 MyProgram.main 的参数
        String[] myArgs = {"参数A", "参数B", "100"};
        // 通过 类名.main() 的方式调用
        MyProgram.main(myArgs);
        System.out.println("--- MyProgram 的 main 方法调用结束 ---");
    }
}

运行步骤:

  1. 编译两个文件:
    javac MyProgram.java Caller.java
  2. 运行 Caller 类:
    java Caller

输出:

这是 Caller 类的 main 方法。
我将调用 MyProgram 的 main 方法。
--- MyProgram 的 main 方法被调用了 ---
接收到的参数个数: 3
参数 1: 参数A
参数 2: 参数B
参数 3: 100
--- MyProgram 的 main 方法调用结束 ---

从输出中可以清楚地看到,Callermain 方法执行了,然后它调用了 MyProgrammain 方法,并成功传递了参数。


调用时的参数传递

无论是从命令行还是在代码中调用,参数都是通过 String[] args 数组传递的。

  • 命令行传递java MyProgram arg1 "arg 2 with space" 会被 JVM 自动解析成一个数组 ["arg1", "arg 2 with space"]
  • 代码中传递:你需要手动创建一个 String 数组,然后将它作为参数传递给 MyProgram.main() 方法,如上面的 Caller.java 示例所示。

一个完整的示例

假设我们想写一个简单的程序,用于计算两个数字的和。

Calculator.java

public class Calculator {
    public static void main(String[] args) {
        // 检查是否提供了足够的参数
        if (args.length < 2) {
            System.out.println("用法: java Calculator <数字1> <数字2>");
            System.out.println("示例: java Calculator 10 20");
            return; // 提前结束程序
        }
        try {
            // 将字符串参数转换为 double 类型
            double num1 = Double.parseDouble(args[0]);
            double num2 = Double.parseDouble(args[1]);
            // 计算并打印结果
            double sum = num1 + num2;
            System.out.println("计算结果: " + num1 + " + " + num2 + " = " + sum);
        } catch (NumberFormatException e) {
            // 如果参数不是有效的数字,捕获异常
            System.out.println("错误: 参数必须是有效的数字。");
        }
    }
}

编译和运行:

  1. 编译

    javac Calculator.java
  2. 正确调用

    java Calculator 50 75.5

    输出

    计算结果: 50.0 + 75.5 = 125.5
  3. 参数不足调用

    java Calculator 100

    输出

    用法: java Calculator <数字1> <数字2>
    示例: java Calculator 10 20
  4. 参数格式错误调用

    java Calculator abc 123

    输出

    错误: 参数必须是有效的数字。
调用方式 语法 场景 示例
命令行 java <ClassName> [arg1] [arg2] ... 标准的程序启动方式,用于日常开发和部署。 java MyProgram "hello world"
代码中调用 ClassName.main(new String[]{"arg1", "arg2"}); 单元测试、框架内部调用、程序逻辑需要再次启动自身等。 MyProgram.main(new String[]{"test"});

理解 main 方法的签名和两种调用方式是掌握 Java 程序结构的第一步,希望这个详细的解释能帮助你彻底搞懂它!

分享:
扫描分享到社交APP
上一篇
下一篇