静态对象如何工作?

时间:2013-04-17 12:03:19

标签: java object static

我知道如何处理物品......但有一件事让我摸不着头脑 静态方法。

我举一个例子。

Toolkit theKit = Toolkit.getDefaultToolkit(); 

我认为theKit对象现在持有new Toolkit();类..但我不确定。

此外,我现在可以使用theKit.getScreenResolution();引用变量theKit

那是因为它自己包含Thetoolkit类吗?

原谅我,既然我把它全部写出来似乎显而易见但无论如何都要生病了。谢谢。

6 个答案:

答案 0 :(得分:5)

static方法属于该类。不是实例。
所有static个成员变量都是一样的 因此,您无需创建对象的实例即可使用该方法。由于它属于该类,您只需通过类名访问它 static方法的常见用法是实用方法。您不使用对象(并且在您的类层次结构设计中存在具体对象可能没有意义),因此您可以通过类访问该方法

答案 1 :(得分:1)

这是一个设计模式。现在考虑到这种情况,Toolkit必须保持单身。 因此,图书馆设计师确保它自己保持单身,为getDefaultToolkit提供方法。

getDefaultToolkit返回Toolkit,可由库用户使用。

现在提供对这种方法的访问,假设有一个不能通过'new Toolkit()`初始化Toolkit,那么该库提供了一个静态方法,可以访问它

答案 2 :(得分:1)

我可以使用一个确实创建类实例的静态方法。静态方法不属于实例,而属于类本身,因此您不需要使用类的实例来使用其静态方法。简单的例子:

public class MyClassExample(){

public static MyClassExample getDefaultInstance(){
 return new MyClassExample();
}

}

然后你可以用这种方式实例化MyClassExample:

MyClassExample example = MyClassExample.getDefaultInstance();

答案 3 :(得分:1)

Toolkit theKit = Toolkit.getDefaultToolkit(); 

上面的行是factory技术来获取Class实例,而getDefaultToolkit()是一个工厂方法,它显然是一个静态方法(因此你直接使用类名调用)将返回类的实例(在您的情况下是Toolkit类)。我们也在单例的情况下使用这种技术。

关于你的问题,是的,因为该类包含方法getScreenResolution(),所以你可以调用它,这很明显。

答案 4 :(得分:1)

Toolkit.getDefaultToolkit()是一个静态工厂辅助方法,用于获取ToolKit类的实例。 'theKit'是一个有效的实例,你可以像使用new创建对象实例时那样使用它。有效的java书籍考虑静态工厂方法而不是构造函数'

中提到了这种帮助方法的最佳实践

答案 5 :(得分:1)

方法getDefaultToolkit()static,这意味着您不需要Toolkit类的实例化对象来访问此方法。当JVM知道类时,它就在那里,并且可以随时访问静态方法。这是因为它们永远不会改变!他们不会改变他们的状态,他们永远不会做其他事情,但在这种情况下返回Toolkit对象。

在这里我说了。在内部我猜测方法Toolkit.getDefaultToolkit()做了类似的事情:

public Toolkit getDefaultToolkit(){
   return new Toolkit();   
}

这太简单了,但在静态方法中的某个地方会创建并返回一个Object。

之后,您的变量theKid实际上保留了对真实Object的引用。一个非静态实例,可以更改和执行操作...例如使用方法theKit.getScreenResolution()它可以为您提供当前屏幕的分辨率..不仅仅是 a 分辨率..但< em>精确的分辨率(每个设备在每个屏幕上都会发生变化) - 意味着此方法不能是静态的,但需要一个Object。

相关问题