为什么这个方法调用每次调用都会返回相同的引用?

时间:2013-07-27 16:22:17

标签: java methods singleton

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

6 个答案:

答案 0 :(得分:4)

原因是字段INSTANCE同时为staticfinal

static表示其范围绑定到封闭类,而不是该类的任何单个实例。 (即使你还没有创建它的任何实例。)在正在运行的Java程序中,每个中只有一个,即使一个类可能有很多实例

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

原因是你已经声明了实例

private static final SomeClass INSTANCE = new SomeClass();

finalstatic,因此实例将分配单个内存,并且常量,因此它正在使用< strong> singleton 模式

看看这个东西 - 的 Implementation of Singleton Pattern Class in Java Introduction

enter image description here

答案 3 :(得分:0)

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

答案 4 :(得分:0)

INSTANTA被声明为final,这意味着它的值在初始化后无法更改。因此,程序保证getInstanta始终返回相同的实例。

答案 5 :(得分:0)

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