从静态初始化程序访问主参数

时间:2015-01-26 12:37:15

标签: java log4j

假设:

public class MyClass {

   static {
     // Access to args is needed here
   }

   public static void main(String[] args) {
    ...
   }
}

我想在上面提到的静态块中访问args。

我知道静态块是在加载(或初始化)类时以及静态main函数之前执行的,但仍然想知道是否可以访问它的args。

顺便说一句 - 我的最终目标是在配置log4j之前在运行时追加日志文件的名称(使用从传递给main的其中一个参数派生的系统属性变量)。

2 个答案:

答案 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