静态方法将在java中执行多少次

静态方法将在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

这与以下线程有关:

假设我在一个类(TestClass)中有一个静态方法,它查询DB并将其存储在一个静态变量中,然后返回它

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没有提到多线程,太好了。每次你调用一个方法,这个方法实际上是被调用的。如果将结果存储在变量中,并且仅访问该变量,则每次读取的变量将是该变量。每次调用方法时,该方法都会被实际调用。如果将结果存储在变量中并仅访问该变量,则每次读取的变量将是该变量。