静态方法返回的值是静态的吗?

时间:2017-09-11 20:17:46

标签: java methods static

请考虑此代码

public class Utilities
{
     public static MyClass GetMyClass()
     {
          MyClass cls = new MyClass();
          return cls;
     }
}

这个静态方法每次调用时都会返回MyClass的新实例吗?或者它会一遍又一遍地返回对同一个实例的引用?

5 个答案:

答案 0 :(得分:1)

new关键字创建一个新实例,调用该方法的所有内容,并将实例返回给调用者。 static关键字告诉编译器该方法在类级别本身可用。调用者可以使用返回的实例。

答案 1 :(得分:0)

  

这个静态方法每次调用时都会返回MyClass的新实例吗?

是。您显式创建了一个返回MyClass的新实例。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

声明方法static意味着它是一个类方法,并且可以在没有实例的情况下在类上调用(并且无法访问实例成员,因为上下文中没有对象可供使用 - 没有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");
    }
}