我知道如何处理物品......但有一件事让我摸不着头脑 静态方法。
我举一个例子。
Toolkit theKit = Toolkit.getDefaultToolkit();
我认为theKit
对象现在持有new Toolkit();
类..但我不确定。
此外,我现在可以使用theKit.getScreenResolution();
引用变量theKit
。
那是因为它自己包含Thetoolkit
类吗?
原谅我,既然我把它全部写出来似乎显而易见但无论如何都要生病了。谢谢。
答案 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。