繁体   English   中英

从对象和类本身调用静态函数之间的区别

[英]Difference between Calling Static function from Object and Class itself

我正在学习单例设计模式,并且确实了解了这个概念。 但是,我对以下代码有疑问:-

class Token
{
    private static int i = 5;
    private static Token obj = new Token();

//Private Constructor
    private Token()
    {
    }

//Returning the singleton object
    public static Token getObject()
    {
        return obj;
    }

    public static int getValue()
    {
        return i;
    }
}

public class TestMain
{
    public static void main(String args[])
    {
        Token obj = Token.getObject();

        System.out.println("Without object " + Token.getValue());
        System.out.println("With object " + obj.getValue());
    }
}

在两种情况下,我都会打印实例变量-

Without object 5
With object 5

两种获取实例变量的方式有什么区别,建议使用哪种?

i是属于Token类的静态变量,因此它对于Token类型的所有对象都具有相同的值。

出于所有实际目的, obj.getValue()Token.getValue()相同,您可以使用其中任何一个,但是为了更好的可读性,请使用Token.getValue()因为它加强了静态变量i和静态方法getValue()属于该类,而不属于该类的某些对象。

实际上,在obj您已经引用了您的单例。 因此,调用Token.getValue()引用与obj.getValue()相同的obj

两者之间几乎没有什么区别,例如,访问权限需要实际的实例,而实际的实例并非总是如此。

至于偏好,取决于您问谁。 对我来说,应该使用类而不是实例来访问静态字段和方法-这清楚地表明它是静态的。

暂无
暂无

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

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