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
方法每次都返回相同的引用?
答案 0 :(得分:4)
原因是字段INSTANCE
同时为static
和final
。
static
表示其范围绑定到封闭类,而不是该类的任何单个实例。 (即使你还没有创建它的任何实例。)在正在运行的Java程序中,每个类中只有一个,即使一个类可能有很多实例
final
表示此字段的值在初始化后无法更改。
因为它是static
,所以对象只有一个“槽”,因为它是final
,这个槽的内容永远不会改变,这就是为什么返回那些内容总会返回相同的东西
答案 1 :(得分:3)
您正在为常量(INSTANCE
)分配一个引用,并且您的getInstance
方法返回该常量,所以是的,它总是返回相同的引用。
答案 2 :(得分:1)
原因是你已经声明了实例
private static final SomeClass INSTANCE = new SomeClass();
为final
和static
,因此实例将分配单个内存,并且常量,因此它正在使用< strong> singleton 模式
看看这个东西 - 的 Implementation of Singleton Pattern Class in Java Introduction 强>
答案 3 :(得分:0)
是的,只要加载了类,它就会返回相同的引用。其static final
答案 4 :(得分:0)
INSTANTA
被声明为final
,这意味着它的值在初始化后无法更改。因此,程序保证getInstanta
始终返回相同的实例。
答案 5 :(得分:0)
您声明了方法和常量static
。这意味着它是类的成员而不是从该类创建的对象。由于类只存在一次,它将始终返回相同的对象。此外,由于您的变量为final
,因此永远不会将其分配给新对象。