[英]Why does this method call return the same reference every time it’s called?
public class SomeClass {
private static final SomeClass INSTANCE = new SomeClass();
private SomeClass() {}
public static SomeClass getInstance() {return INSTANCE;}
public static void main(String[] args) {
System.out.println(getInstance());
}
}
为什么getInstance
方法每次都返回相同的引用?
原因是INSTANCE
字段既是static
也是final
。
static
表示其范围绑定到封闭类,而不是该类的任何单个实例。 (即使你没有创建它的任何实例。)在一个正在运行的Java程序中,每个类只有一个,即使一个类可能有很多实例 。
final
意味着该字段的值在初始化后无法更改。
因为它是static
,所以对象只有一个“槽”,因为它是final
的,这个槽的内容永远不会改变,这就是为什么返回那些内容将总是返回相同的东西。
您正在为一个常量( INSTANCE
)分配一个引用,并且您的getInstance
方法返回该常量,所以是的,它总是返回相同的引用。
原因是因为你已经声明了实例
private static final SomeClass INSTANCE = new SomeClass();
作为final
和static
,因此实例将被分配一个内存并且也是常量 ,因此它使用单例模式
看看这个东西 - 在Java简介中实现Singleton Pattern Class
是的,只要加载了类,它就会返回相同的引用。 它的static final
INSTANTA
被宣布为final
,这意味着它的值在初始化后无法更改。 因此,程序保证getInstanta
始终返回相同的实例。
你声明了方法和常量static
。 这意味着它是类的成员而不是从该类创建的对象。 由于类只存在一次,它将始终返回相同的对象。 此外,由于您的变量是final
,因此永远不能将其分配给新对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.