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)
某些(?)JRE实现的系统属性提供系统属性"sun.java.command"以获取用于启动程序的programm-name和参数.比如"myjar.jar param1 param2 ......".
虽然此值甚至不属于文档中提到的属性集,但它存在于Oracle-JRE v1.8和OpenJRE v1.8(已测试)中.
我找不到任何文档是否默认支持此值(最好我能找到的是System#getProperties()文档中的列表).对此有任何澄清都是值得欢迎的.小心轻放!!!
| 归档时间: |
|
| 查看次数: |
14635 次 |
| 最近记录: |