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

时间:2016-08-13 11:06:32

标签: java oop design-patterns static singleton

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

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

获取实例变量的两种方式之间的区别是什么?推荐使用哪种方法?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

事实上在Token.getValue()中,您可以参考您的单身人士。因此,调用obj.getValue()引用与{{1}}

相同的obj

答案 2 :(得分:1)

没有什么区别,例如访问你需要实际的实例,而你并不总是这样。

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