如何在 java 中调用类的静态块



>我有具有静态块的类,如下所示:

public class DataProvider {
static int a;
static String b;
static {
a = readRollConfiguration();
b = readNameConfiguration();
}

public static int getRoll() {
return a;
}
}

我更改了此类的配置和调用方法,然后我获得了ab的旧值,直到应用程序被杀死并重新启动。

那么有没有办法调用静态块以便更新ab

ab只加载一次。如果要在每次调用方法时readRollConfiguration调用方法并readNameConfigurationgetRoll,则必须在那里调用该方法。

public class DataProvider {
public static int getRoll() {
return readRollConfiguration();
}
}

您可以使用 Class.forName("com.the.ClassName"); 调用静态块而不引用该类的任何实例。

您正在使用static初始值设定项块初始化静态变量的值ab作为类初始化的一部分DataProvider这些值将相同,除非您再次更改static值。

因此,请更新您的DataProvider类并添加reloadRollConfig()reloadNameConfig(),如下所示,以便从配置中再次重新加载值:

public class DataProvider {
static int a;
static String b;
static {
a = readRollConfiguration();
b = readNameConfiguration();
}
public static int getRollConfig() {//no reload, gets the current value
return a;
}
public static int getNameConfig() {//no reload, gets the current value
return b;
}

public static int reloadAndGetRollConfig() {//reload and get the new value
a = readRollConfiguration();
return a;
}
public static int reloadAndGetNameConfig() {//reload and get the new value
b = readNameConfiguration();
return b;
}
}

是的,我知道它的坏主意,但配置更改并不经常。

我强烈建议您定期重新加载ab的值,以将最新值设置为DataProvider类。您可以使用简单的调度程序或使用 Ehcache 等框架实现缓存层来执行此操作。缓存框架提供了许多用于缓存静态数据的功能,我建议您需要考虑为此类配置数据(即不经常更改的数据)实现缓存

你不能调用静态块。它在创建类对象时调用。您可以将其视为描述类的类对象的构造函数。与创建实例时调用的构造函数不同。

你的做法是完全错误的。 静态块只会在加载类时运行一次。

public class DataProvider {
static int a;
static String b;
static {
a = getSum();
b = "15";
}
public static int getSum(){
return 5 + 6;
}
public static int getRoll() {
return a;
}
}

因此,在这段代码中,每当加载类时,都会创建变量a11DataProvider值。而且,关键是这个值将是相同的,除非DataProvider类不会被重新编译或重新加载。甚至,如果getSum()每次都返回新值,变量a将仅包含第一个值。

因此,如果您希望a是动态的,则每次要访问a时都有更新变量,如下所示:

public static int get_a() {
return  a = getSum();
}

最新更新