【问题标题】:how to execute static block after main method in java?如何在java中的main方法之后执行静态块?
【发布时间】:2019-02-05 13:20:14
【问题描述】:

我想在调用静态块之前“执行” 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

【问题讨论】:

  • “根据Java规则静态块将在类加载时执行,然后调用main()方法”你很好地总结了情况。答案是不。如果您不喜欢这种行为,请不要使用静态初始化程序块。
  • 你已经在这里回答了你自己的问题:根据 Java 规则,静态块将在类加载时执行,然后调用 main() 方法

标签: java static-block


【解决方案1】:

有什么办法可以先“执行”main方法,然后是静态blk

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

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

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

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

【讨论】:

  • 好主意。 OP 可能希望在应用退出后运行一些代码。如果这是预期的场景,那么关闭挂钩就是一种解决方案。
【解决方案2】:

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

公共类加载器{

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

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2013-12-19
    • 2020-01-27
    • 2014-06-05
    相关资源
    最近更新 更多