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
意味着它是一个类方法,可以在没有实例的类上调用(并且无法访问实例成员,因为上下文中没有要使用的对象-nothis
)
请看下面的代码。预期产出:
[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())
。确实如此。有很多方法可以同时进行实验和学习。