如何在 java 中多次执行静态块
How to execute a static block for multiple times in java
我给了一个任务,每 20 秒执行一次静态块。我有一个由静态块组成的 class。
public class Hello{
static{
System.out.println("helloo...");
}
}
我知道加载 class 时会执行静态块。
但是我想知道有什么方法可以多次执行静态块以及如何执行?
加载 class 时静态块 运行s,你不能 运行 多次。
与您想要多次执行的任何其他代码块一样,您可以使用循环或更好的方法来创建静态函数并多次调用它:
public class Hello{
public static void hello() {
System.out.println("helloo...");
}
public void someMethod() {
for(int i= 0; i < 10; i++) {
hello();
}
}
}
你不能。当 class 加载时,它只会 运行 一次。您还有一次机会可以在 class.
中写入任意数量的静态块
[https://beginnersbook.com/2013/04/java-static-class-block-methods-variables/][1]
可以使用自定义 Class 加载程序来执行静态块。
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();
}
}
}
我给了一个任务,每 20 秒执行一次静态块。我有一个由静态块组成的 class。
public class Hello{
static{
System.out.println("helloo...");
}
}
我知道加载 class 时会执行静态块。
但是我想知道有什么方法可以多次执行静态块以及如何执行?
加载 class 时静态块 运行s,你不能 运行 多次。
与您想要多次执行的任何其他代码块一样,您可以使用循环或更好的方法来创建静态函数并多次调用它:
public class Hello{
public static void hello() {
System.out.println("helloo...");
}
public void someMethod() {
for(int i= 0; i < 10; i++) {
hello();
}
}
}
你不能。当 class 加载时,它只会 运行 一次。您还有一次机会可以在 class.
中写入任意数量的静态块[https://beginnersbook.com/2013/04/java-static-class-block-methods-variables/][1]
可以使用自定义 Class 加载程序来执行静态块。
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();
}
}
}