请考虑此代码
public class Utilities
{
public static MyClass GetMyClass()
{
MyClass cls = new MyClass();
return cls;
}
}
这个静态方法每次调用时都会返回MyClass
的新实例吗?或者它会一遍又一遍地返回对同一个实例的引用?
答案 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");
}
}