静态方法将在java中执行多少次
这与以下线程有关: 假设我在一个类(TestClass)中有一个静态方法,它查询DB并将其存储在一个静态变量中,然后返回它静态方法将在java中执行多少次,java,static-methods,Java,Static Methods,这与以下线程有关: 假设我在一个类(TestClass)中有一个静态方法,它查询DB并将其存储在一个静态变量中,然后返回它 public static List<MyClass> getMyData() { setMyDataList(getMyNewData.execute());//DB Call and assigns the result to the static variable. return myDataList;// retu
public static List<MyClass> getMyData()
{
setMyDataList(getMyNewData.execute());//DB Call and assigns the result to the static variable.
return myDataList;// returns the static variable
}
公共静态列表getMyData()
{
setMyDataList(getMyNewData.execute());//DB调用并将结果分配给静态变量。
return myDataList;//返回静态变量
}
在这种情况下,假设类A调用获取数据并存储在
myDataList
中的TestClass.getMyData()
,然后类B调用TestClass.getMyData()
,是否会再次命中DB?静态块不等于静态方法。
In case of static block:
该静态块在类装入器装入该类时装入。除非您有多个类加载器,否则它只执行一次,并且插入的数据将在所有实例中共享
Incase of static method :
它几乎就像一个实例方法,你调用该方法的次数会被击中。Diff只是您不需要实例来调用它
你根本不需要那种方法。把你们的代码放在一个静态块中,点击数据库,然后插入列表。您可以使用static访问该列表,并且不要忘记将该列表设置为static,static块不等于static方法。
In case of static block:
该静态块在类装入器装入该类时装入。除非您有多个类加载器,否则它只执行一次,并且插入的数据将在所有实例中共享
Incase of static method :
它几乎就像一个实例方法,你调用该方法的次数会被击中。Diff只是您不需要实例来调用它
你根本不需要那种方法。把你们的代码放在一个静态块中,点击数据库,然后插入列表。您可以使用static访问该列表,并且不要忘记创建该列表
static
是的,它将再次被“命中”
如果您不希望,您可能希望在静态类中有一个标志,指示是否已调用该方法:
private static boolean methodAlreadyCalled = false;
public static List<MyClass> getMyData()
{
if (!methodAlreadyCalled)
{
setMyDataList(getMyNewData.execute());
methodAlreadyCalled = true;
}
return myDataList;
}
private静态布尔方法readycalled=false;
公共静态列表getMyData()
{
如果(!methodAlreadyCalled)
{
setMyDataList(getMyNewData.execute());
methodAlreadyCalled=true;
}
返回myDataList;
}
是的,它将再次被“命中”
如果您不希望,您可能希望在静态类中有一个标志,指示是否已调用该方法:
private static boolean methodAlreadyCalled = false;
public static List<MyClass> getMyData()
{
if (!methodAlreadyCalled)
{
setMyDataList(getMyNewData.execute());
methodAlreadyCalled = true;
}
return myDataList;
}
private静态布尔方法readycalled=false;
公共静态列表getMyData()
{
如果(!methodAlreadyCalled)
{
setMyDataList(getMyNewData.execute());
methodAlreadyCalled=true;
}
返回myDataList;
}
但我想这是一种方法,不是静态块。非常感谢您的帮助。这也是我的理解。但我从其他渠道弄糊涂了。谢谢你的澄清。但我想这是一种不是静态块的方法。非常感谢你的帮助。这也是我的理解。但我从其他渠道弄糊涂了。感谢您的澄清。如果它被多个线程访问,那么可能需要同步。但OP并没有提到多线程,所以很好。若它被多个线程访问,那个么可能需要同步。但是OP没有提到多线程,太好了。每次你调用一个方法,这个方法实际上是被调用的。如果将结果存储在变量中,并且仅访问该变量,则每次读取的变量将是该变量。每次调用方法时,该方法都会被实际调用。如果将结果存储在变量中并仅访问该变量,则每次读取的变量将是该变量。