3
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方法每次总是返回相同的引用?

4

6 回答 6

4

原因是该字段INSTANCE既是static又是final

static意味着它的范围绑定到封闭类,而不是该类的任何单个实例。(即使您无论如何都没有创建它的任何实例。)在运行的 Java 程序中,每个只有一个,即使一个类可能有很多实例

final表示该字段的值在初始化后无法更改。

因为它是static,所以对象只有一个“槽”,因为它final是这个槽的内容永远不会改变,这就是为什么返回这些内容总是会返回相同的东西。

于 2013-07-27T16:28:49.087 回答
3

您正在分配对常量 ( INSTANCE) 的引用,并且您的getInstance方法返回该常量,所以是的,它总是返回相同的引用。

于 2013-07-27T16:24:46.183 回答
1

原因是你已经声明了实例

private static final SomeClass INSTANCE = new SomeClass();

as finaland static ,因此实例将被分配一个内存并且也是常量,因此它使用单例模式

看看这玩意儿 ——Java中Singleton Pattern Class的实现介绍

在此处输入图像描述

于 2013-07-27T16:27:12.430 回答
0

INSTANTA被声明final,这意味着它的值一旦被初始化就不能改变。因此,程序保证getInstanta总是返回相同的实例。

于 2013-07-27T16:26:28.723 回答
0

您声明了 method 和 constant static。这意味着它是类的成员,而不是从该类创建的对象。由于该类仅存在一次,因此它将始终返回相同的对象。此外,由于您的变量是final,它永远不能分配给新对象。

于 2013-07-27T16:27:59.003 回答
0

是的,只要加载了类,它就会始终返回相同的引用。它的static final

于 2013-07-27T16:25:50.807 回答