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

Int*_*ion 7 java log4j

鉴于:

public class MyClass {

   static {
     // Access to args is needed here
   }

   public static void main(String[] args) {
    ...
   }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

SMA*_*SMA 5

您无法从静态块访问 main 的参数。相反(或另外)将参数传递给 main,我建议您使用系统参数,例如:

java -Dmyvar=value ...
Run Code Online (Sandbox Code Playgroud)

并在静态块中访问它,例如

static {
    String parameterValue = System.getProperty("myvar");
    ...
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*exR 4

有一个特殊的系统属性“sun.java.command”,其中包含整个命令行。

这是一个例子:

static {
    System.out.println(System.getProperty("sun.java.command"));
}
Run Code Online (Sandbox Code Playgroud)

当我使用参数运行程序时,aaa bbb我得到以下输出:

com.MyClass aaa bbb
Run Code Online (Sandbox Code Playgroud)