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

kam*_*lot 11 java command-line command program-entry-point class

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

它有主要方法的主类

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

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

pax*_*blo 11

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

如果你想在其他地方使用这些值,那么main函数需要以某种方式使它们可用.


一个简单的方法(不一定是最好的方法)就是简单地存储字符串作为第一件事main并提供获取它们的方法:

Scratch2.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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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] + "]");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Arg count is [3]
Arg[0] is [a]
Arg[1] is [b]
Arg[2] is [c]
Run Code Online (Sandbox Code Playgroud)


Mik*_*uel 5

如果您不关心操作系统的可移植性,请阅读/proc/self/cmdline或与您的操作系统等效。

http://en.wikipedia.org/wiki/Procfs


Pau*_*aul 5

某些(?)JRE实现的系统属性提供系统属性"sun.java.command"以获取用于启动程序的programm-name和参数.比如"myjar.jar param1 param2 ......".

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

我找不到任何文档是否默认支持此值(最好我能找到的是System#getProperties()文档中的列表).对此有任何澄清都是值得欢迎的.小心轻放!!!