如何在Java中的main方法之后执行静态块?

时间:2019-02-05 13:20:15

标签: java static-block

我想在调用静态块之前“执行” main()方法。根据Java规则,在加载类时将执行静态块,然后调用main()方法。有什么办法可以先“执行”主方法,然后进行静态块?

public class StaticDemo {
    static {
        System.out.println("in  static block");
    }

    public static void main(String  args[]){
        System.out.println("in main method");
    }
}

输出将是...。

in  static block
in main method

从静态块调用main方法只会生成预期的输出。但是它首先执行了静态块,然后从它调用了main方法。

import com.sun.javaws.Main;

public class StaticDemo {
        static {
        main(null);
        System.out.println("in  static block");
    }

    public static void main(String  args[]){
        System.out.println("in main method");
    }
}

输出将是...

in main method
in  static block
in main method

我的预期输出是....

in main method
in  static block

2 个答案:

答案 0 :(得分:2)

  

有什么办法可以先“执行”主方法,然后再进行静态blk

不。没有。不是那个静态块。

假设您要在main方法完成后执行一些代码,则可以:

  • 将代码放入您在main方法末尾调用的方法
  • 将代码放入主线程的未捕获异常处理程序中,并故意在main()中引发异常,或者
  • 将代码放入关闭挂钩。

您还可以将代码放入不同类的静态块中,并动态加载/初始化它,或以各种方式触发它。但是调用方法更简单。

答案 1 :(得分:0)

使用静态块是不可能的,但是您可以使用实例初始化器块:

公共类加载器{

{
    System.out.println("in instance initializer");
}

public static void main(final String[] args) {
    System.out.println("in main method");
    new Loader();
}

}