如何使用java从另一个类中获取命令行参数

所以假设我有一个java包....

它有主类和主方法

然后它有一大堆其他类.....

我的问题是,是否有可能从这些不是主类的一部分但位于同一包中的其他类中获取传递给main方法的args...


答案 1

不,不是移植的,可能有一些基于JVM实现的诡计,但我从未见过它,即使它存在,依赖它也是一个非常糟糕的主意。

如果希望这些值位于其他位置,则该函数需要以某种方式使它们可用。main


一个简单的方法来做到这一点(不一定是最好的方法)是简单地将字符串作为第一件事存储进去,并提供一种获取它们的方法:main

划痕2.java:

public class Scratch2 {
    // Arguments and accessor for them.

    private static String[] savedArgs;
    public static String[] getArgs() {
        return savedArgs;
    }

    public static void main(String[] args) {
        // Save them away for later.

        savedArgs = args;

        // Test that other classes can get them.

        CmdLineArgs cla = new CmdLineArgs();
        cla.printArgs();
    }
}

CmdLineArgs.java:

public class CmdLineArgs {
    public void printArgs() {
        String[] args = Scratch2.getArgs();
        System.out.println ("Arg count is [" + args.length + "]");
        for (int i = 0; i < args.length; i++) {
            System.out.println ("Arg[" + i + "] is [" + args[i] + "]");
        }
    }
}

而且,当使用参数运行时,这将输出:a b c

Arg count is [3]
Arg[0] is [a]
Arg[1] is [b]
Arg[2] is [c]

答案 2

某些 (?) 上的系统属性JRE 实现提供系统属性“sun.java.command”来获取用于启动程序的程序名称和参数。就像“myjar.jar param1 param2 ...”。

虽然此值甚至不属于文档中提到的属性集,但它存在于Oracle-JRE v1.8和OpenJRE v1.8(测试)中。

我找不到任何文档,无论默认情况下是否支持此值(我能找到的最好的是文档中的列表)。欢迎对此作出任何澄清。小心处理!!!System#getProperties()