从静态初始值设定项访问主要参数
Accessing main arguments from a static initializer
鉴于:
public class MyClass {
static {
// Access to args is needed here
}
public static void main(String[] args) {
...
}
}
我想访问上述静态块中的参数。
我知道静态块是在 class 加载(或初始化)时和静态主函数之前执行的,但仍然想知道是否可以访问它的参数。
顺便说一句 - 我的最终目标是在配置 log4j 之前,在 运行 时间附加到日志文件的名称(使用从参数之一派生的系统 属性 变量传递给 main).
您无法从静态块访问 main 的参数。相反(或除此之外)将参数传递给 main,我建议您使用系统参数,如:
java -Dmyvar=value ...
并在静态块中访问它,如
static {
String parameterValue = System.getProperty("myvar");
...
}
有一个包含整个命令行的特殊系统属性 "sun.java.command"。
这是一个例子:
static {
System.out.println(System.getProperty("sun.java.command"));
}
当我 运行 我的程序带有参数 aaa bbb
时,我得到以下输出:
com.MyClass aaa bbb
鉴于:
public class MyClass {
static {
// Access to args is needed here
}
public static void main(String[] args) {
...
}
}
我想访问上述静态块中的参数。
我知道静态块是在 class 加载(或初始化)时和静态主函数之前执行的,但仍然想知道是否可以访问它的参数。
顺便说一句 - 我的最终目标是在配置 log4j 之前,在 运行 时间附加到日志文件的名称(使用从参数之一派生的系统 属性 变量传递给 main).
您无法从静态块访问 main 的参数。相反(或除此之外)将参数传递给 main,我建议您使用系统参数,如:
java -Dmyvar=value ...
并在静态块中访问它,如
static {
String parameterValue = System.getProperty("myvar");
...
}
有一个包含整个命令行的特殊系统属性 "sun.java.command"。
这是一个例子:
static {
System.out.println(System.getProperty("sun.java.command"));
}
当我 运行 我的程序带有参数 aaa bbb
时,我得到以下输出:
com.MyClass aaa bbb