这与以下主题相关:
https://stackoverflow.com/a/17141660/1120126
假设我在类(TestClass)中有一个静态方法,它查询数据库并将其存储在静态变量中,然后返回它。
public static List<MyClass> getMyData()
{
setMyDataList(getMyNewData.execute());//DB Call and assigns the result to the static variable.
return myDataList;// returns the static variable
}
在这种情况下,假设A类调用TestClass.getMyData()
获取数据并存储在myDataList
中,然后B类调用TestClass.getMyData()
,数据库是否会再次被击中?
答案 0 :(得分:2)
静态块不等于静态方法。
Incase of static method :
当类加载器加载该类时,会加载该静态块。除非您有多个类加载器,否则只有一次执行,并且您插入的数据将在所有实例中共享。
static
它几乎就像一个实例方法,你会多次打这个方法。 Diff只是您不需要实例来调用它。
你根本不需要这种方法。将您的代码放在静态块中,然后将命中数据放入列表中。您可以使用静态访问该列表,并且不要忘记创建该列表// Create the event
var event = new CustomEvent("DOMContentLoaded", { "detail": "Content Loaded trigger" });
// Dispatch/Trigger/Fire the event
document.dispatchEvent(event);
。
答案 1 :(得分:2)
是的,它会被击中&#39;再次...
如果您不想要,您可能希望在静态类中有一个标志,指示该方法是否已被调用:
private static boolean methodAlreadyCalled = false;
public static List<MyClass> getMyData()
{
if (!methodAlreadyCalled)
{
setMyDataList(getMyNewData.execute());
methodAlreadyCalled = true;
}
return myDataList;
}