从静态初始值设定项访问主要参数

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