繁体   English   中英

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

[英]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();

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

看看这个东西 - 在Java简介中实现Singleton Pattern Class

在此输入图像描述

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM