如何在java中调用类的静态块
我有一个具有静态块的类,如下所示:如何在java中调用类的静态块,java,android,Java,Android,我有一个具有静态块的类,如下所示: public class DataProvider { static int a; static String b; static { a = readRollConfiguration(); b = readNameConfiguration(); } public static int getRoll() { return a; } } 我更改了这个类的配置和调用方法,然后得到了较旧的a和b,直到应用程序被终止并重新启动 那
public class DataProvider {
static int a;
static String b;
static {
a = readRollConfiguration();
b = readNameConfiguration();
}
public static int getRoll() {
return a;
}
}
我更改了这个类的配置和调用方法,然后得到了较旧的a和b,直到应用程序被终止并重新启动
那么,有没有办法调用静态块来更新a和b?
a
和b
只加载一次。如果每次调用方法getRoll
时都要调用方法readRollConfiguration
和readNameConfiguration
,则必须在那里调用该方法
public class DataProvider {
public static int getRoll() {
return readRollConfiguration();
}
}
a
和b
只加载一次。如果每次调用方法getRoll
时都要调用方法readRollConfiguration
和readNameConfiguration
,则必须在那里调用该方法
public class DataProvider {
public static int getRoll() {
return readRollConfiguration();
}
}
使用
静态
初始化程序块初始化静态变量a
和b
的值,作为数据提供程序
类初始化的一部分,并且除非再次更改静态
值,否则这些值将相同
因此,更新您的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;
}
}
是的,我知道这是个坏主意,但配置变化不太频繁
我强烈建议定期重新加载
a
和b
的值,以设置数据提供程序
类的最新值。您可以通过使用一个简单的调度器来实现这一点,也可以使用类似的框架来实现缓存层。缓存框架提供了许多用于缓存静态数据的功能,我建议您需要考虑为此类配置数据(即不经常更改的数据)实现缓存.您正在初始化静态变量a
和b
的值,作为DataProvider
类初始化的一部分,使用静态
初始化程序块进行初始化,除非再次更改静态
值,否则这些值将相同
因此,更新您的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;
}
}
是的,我知道这是个坏主意,但配置变化不太频繁
我强烈建议定期重新加载
a
和b
的值,以设置数据提供程序
类的最新值。您可以通过使用一个简单的调度器来实现这一点,也可以使用类似的框架来实现缓存层。缓存框架提供了许多用于缓存静态数据的功能,我建议您需要考虑为此类配置数据(即不经常更改的数据)实现缓存。您不能调用静态块。在创建类对象时调用它。您可以将其视为描述类的类对象的构造函数。与创建实例时调用的构造函数不同。不能调用静态块。在创建类对象时调用它。您可以将其视为描述类的类对象的构造函数。与创建实例时调用的构造函数不同。您所采用的方法完全错误。每当加载类时,静态块将只运行一次
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;
}
}
因此,在这段代码中,每当加载DataProvider
类时,将创建一个变量,并为其赋值11
。关键是,除非DataProvider
类不会重新编译或重新加载,否则该值将保持不变。甚至,如果getSum()
每次都返回新值,变量a
将只包含第一个值
因此,如果您希望a
是动态的,那么每当您想要访问a
时,您都有更新变量,如下所示:
public static int get_a() {
return a = getSum();
}
你这样做是完全错误的。每当加载类时,静态块将只运行一次
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;
}
}
因此,在这段代码中,每当加载DataProvider
类时,将创建一个变量,并为其赋值11
。关键是,除非DataProvider
类不会重新编译或重新加载,否则该值将保持不变。甚至,如果getSum()
每次都返回新值,变量a
将只包含第一个值
因此,如果您希望a
是动态的,那么每当您想要访问a
时,您都有更新变量,如下所示:
public static int get_a() {
return a = getSum();
}
您可以使用Class.forName(“com.the.ClassName”)调用静态块而不调用该类的任何实例。您可以使用class.forName(“com.the.ClassName”)调用静态块而不调用该类的任何实例。AFAIK,否。删除所有“静态”,并执行一些不太静态的操作。一个便宜的解决方案是创建一个静态方法,它执行静态块所做的事情(但这不是超级安全的)。静态块的整个点只执行一次——当类从磁盘加载时。如果你想让它在其他时间发生,静态块不是这样做的。好吧,不。去掉所有的“静态”,做一些不太静态的事情。一个便宜的解决方案是创建一个静态方法,它执行静态块所做的事情(但这不是超级安全的)。静态块的整个点只执行一次——当类从磁盘加载时。如果你希望它在其他时间发生,静态块不是这样做的方法。我知道我可以这样做,但我的问题的答案是什么。这可能是个坏主意,getRoll result coul