Java 从对象调用静态函数和从类本身调用静态函数的区别
我在学习singleton设计模式,我确实理解这个概念。但是,我对以下代码有疑问:-Java 从对象调用静态函数和从类本身调用静态函数的区别,java,oop,design-patterns,static,singleton,Java,Oop,Design Patterns,Static,Singleton,我在学习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 getObj
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());
}
}
在这两种情况下都会打印实例变量i——
Without object 5
With object 5
获取实例变量的两种方法与推荐的方法有什么区别?事实上,在
obj
中,您引用了您的singleton。因此,调用Token.getValue()
引用与obj.getValue()
相同的obj,实际上在obj
中,您引用了您的单身汉。因此,调用Token.getValue()
引用与obj.getValue()
相同的obj没有什么区别,例如,您需要实际实例的实例访问权限,而实际实例并不总是拥有
至于偏好,这取决于你问谁。对我来说,静态字段和方法应该使用类而不是实例来访问-这清楚地表明它是静态的。没有什么区别,例如,实例访问需要实际的实例,而实际的实例并不总是有的
至于偏好,这取决于你问谁。对于我来说,应该使用类而不是实例来访问静态字段和方法-这清楚地表明它是静态的。
i
是属于类标记的静态变量,因此它对于标记类型的所有对象都具有相同的值
出于所有实际目的,obj.getValue()
与Token.getValue()
相同,您可以使用其中任何一种,但为了更好的可读性,请使用Token.getValue()
,因为它强化了静态变量i
和静态方法getValue()
作为一个整体属于该类,而不属于该类的某些对象。i
是一个静态变量,属于类Token
,因此它对于Token
类型的所有对象都具有相同的值
出于所有实际目的,obj.getValue()
与Token.getValue()
相同,您可以使用其中任何一种,但为了更好的可读性,请使用Token.getValue()
,因为它强化了静态变量i
和静态方法getValue()
属于整个类,而不是该类的某些对象。代码中没有“实例变量i
”。当字段是静态字段时,它不是实例变量。代码中没有“实例变量i
”。当一个字段是静态的,它不是一个实例变量。。如果有一个非静态的私有变量“val”,那么要访问它,我们需要对象-obj。否则,对于所有静态变量,两种方法实际上是相同的。对吧?好吧,我明白了。。如果有一个非静态的私有变量“val”,那么要访问它,我们需要对象-obj。否则,对于所有静态变量,两种方法实际上是相同的。对吗?