如何在Java中多次执行静态块

时间:2018-10-03 14:25:23

标签: java static-block

我给了每20秒执行一次静态块的任务。我有一个包含静态块的类。

public class Hello{
      static{
        System.out.println("helloo...");
      }
}

我知道在加载类时会执行静态块。

但是我想知道有什么方法可以多次执行静态块以及如何执行?

4 个答案:

答案 0 :(得分:0)

静态块在类加载时运行,不能多次运行。

答案 1 :(得分:0)

与要执行多次的任何其他代码块一样,您可以使用循环或更好的方法来创建静态函数并多次调用:

public class Hello{
    public static void hello() {
        System.out.println("helloo...");
    }

    public void someMethod() {

        for(int i= 0; i < 10; i++) {
            hello();
        }
     }
}

答案 2 :(得分:0)

您不能。当类加载时,它将仅运行一次。您还可以在一个类中编写任意数量的静态块。

[https://beginnersbook.com/2013/04/java-static-class-block-methods-variables/][1]

答案 3 :(得分:0)

使用自定义类加载器可以实现执行静态块。

ClassReload.java

    Class<?> load = ClassLoader.getSystemClassLoader().loadClass("com.Hello");
//Assume Hello class is in "com" package 
        load.newInstance().toString();
        URL[] urls = { load.getProtectionDomain().getCodeSource().getLocation() };
        ClassLoader delegateParent = load.getClassLoader().getParent();
        try (URLClassLoader cl = new URLClassLoader(urls, delegateParent)) {
            Class<?> reloaded = cl.loadClass(load.getName());
            reloaded.newInstance().toString();              
            }
            }
        }

Refer Oracle Document for URLClassLoader