Java 静态方法返回的值是静态的吗? 请考虑此代码 public class Utilities { public static MyClass GetMyClass() { MyClass cls = new MyClass(); return cls; } }

Java 静态方法返回的值是静态的吗? 请考虑此代码 public class Utilities { public static MyClass GetMyClass() { MyClass cls = new MyClass(); return cls; } },java,methods,static,Java,Methods,Static,此静态方法是否会在每次调用时返回一个新的MyClass实例?或者它将一次又一次地返回对同一实例的引用 此静态方法是否会在每次调用时返回一个新的MyClass实例 对。您显式地创建了一个return-a新实例MyClass每次调用new-MyClass()时,您都在创建一个新对象,因此您可以预期它将返回一个新实例。您可以通过调用此方法两次并比较结果来检查这一点。它既不是静态的,也不是动态的。这只是一个例子。这取决于开发人员和对象的使用 每次调用静态方法时,都会创建一个新实例。声明一个方法stati

此静态方法是否会在每次调用时返回一个新的
MyClass
实例?或者它将一次又一次地返回对同一实例的引用

此静态方法是否会在每次调用时返回一个新的
MyClass
实例


对。您显式地创建了一个return-a新实例
MyClass

每次调用
new-MyClass()
时,您都在创建一个新对象,因此您可以预期它将返回一个新实例。您可以通过调用此方法两次并比较结果来检查这一点。

它既不是静态的,也不是动态的。这只是一个例子。这取决于开发人员和对象的使用


每次调用静态方法时,都会创建一个新实例。

声明一个方法
static
意味着它是一个类方法,可以在没有实例的类上调用(并且无法访问实例成员,因为上下文中没有要使用的对象-no
this

请看下面的代码。预期产出:

[1] Different
[2] Same
如果希望变量具有类的生存期,并且每次都返回相同的对象,请在类中将变量声明为
static

public static String getThing(){
    String r=new String("ABC");//Created every time the method is invoked.
    return r;
}

private static String sr=new String("ABC");//Static member - one for the whole class.

public static String getStaticThing(){
    return sr;
}

public static void main (String[] args) throws java.lang.Exception
{
    String thing1=getThing();
    String thing2=getThing();
    if(thing1==thing2){
        System.out.println("[1] Same");
    }else{
        System.out.println("[1] Different");
    }

    String thing1s=getStaticThing();
    String thing2s=getStaticThing();
    if(thing1s==thing2s){
        System.out.println("[2] Same");
    }else{
        System.out.println("[2] Different");
    }
}

new关键字会创建一个新实例,只要调用了该方法,实例就会返回给调用方。static关键字告诉编译器该方法在类级别本身可用。调用方可以使用返回的实例

它每次都显式地创建一个新实例…静态是唯一的方法,即方法(内容)中的所有内容都表示为静态,并且与任何对象都不关联。但是方法的内容每次都会创建新对象并返回给您。这是您应该能够自己测试的东西(如果您确实认为它需要测试的话)。在MyClass的构造函数中添加System.out.println(“hello”),调用静态方法5次,看看hello被打印了多少次。@jbniset或只是
System.out.println(GetMyClass()==GetMyClass())
。确实如此。有很多方法可以同时进行实验和学习。