假设:
public class MyClass {
static {
// Access to args is needed here
}
public static void main(String[] args) {
...
}
}
我想在上面提到的静态块中访问args。
我知道静态块是在加载(或初始化)类时以及静态main函数之前执行的,但仍然想知道是否可以访问它的args。
顺便说一句 - 我的最终目标是在配置log4j之前在运行时追加日志文件的名称(使用从传递给main的其中一个参数派生的系统属性变量)。
答案 0 :(得分:4)
您无法从静态块访问main的参数。相反(或不加)将参数传递给main,我建议您使用System参数,如:
java -Dmyvar=value ...
并在静态块中访问它,如
static {
String parameterValue = System.getProperty("myvar");
...
}
答案 1 :(得分:4)
有一个特殊的系统属性“sun.java.command”,它包含整个命令行。
以下是一个例子:
static {
System.out.println(System.getProperty("sun.java.command"));
}
当我使用参数aaa bbb
运行程序时,我得到以下输出:
com.MyClass aaa bbb