Java:何时使用静态方法

Java:何时使用静态方法

我想知道何时使用静态方法?假设我有一个带有几个getter和setter的类,一个或两个方法,我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法?

例如

Obj x = new Obj();x.someMethod

要么

Obj.someMethod

(这是静态方式吗?)

我很困惑!


慕标5832272
浏览 4158回答 4
4回答

收到一只叮咚

一个经验法则:问问自己“即使没有构建Obj,这个方法也有意义吗?” 如果是这样,那肯定是静态的。所以在一个类中Car你可能有一个double convertMpgToKpl(double mpg)静态的方法,因为人们可能想知道35mpg转换成什么,即使没有人建造过汽车。但是void setMileage(double mpg)(设置一个特定Car的效率)不能是静态的,因为在构建任何Car之前调用该方法是不可思议的。(顺便说一下,反过来并不总是这样:你有时可能有一个涉及两个Car对象的方法,但仍然希望它是静态的。例如Car theMoreEfficientOf( Car c1, Car c2 )。虽然这可以转换为非静态版本,但有些人会认为,因为那里不是一个“特权”选择,其中Car更重要,你不应该强迫调用者选择一个Car作为你将调用方法的对象。这种情况只占所有静态方法的一小部分,虽然。)

慕容森

仅在以下方案中定义静态方法:如果您正在编写实用程序类,则不应更改它们。如果方法未使用任何实例变量。如果任何操作不依赖于实例创建。如果有一些代码可以被所有实例方法轻松共享,请将该代码提取到静态方法中。如果您确定永远不会更改或覆盖方法的定义。由于静态方法无法被覆盖。

慕莱坞森

在阅读了Misko的文章后,我认为从测试的角度看静态方法是不好的。你应该有工厂(可能使用像Guice这样的依赖注入工具)。我怎样才能确保我只有一件东西只有一个东西“如何确保我只有一个东西”的问题很好地回避了。您只在main中实例化一个ApplicationFactory,因此,您只实例化所有单例的单个实例。静态方法的基本问题是它们是过程代码静态方法的基本问题是它们是过程代码。我不知道如何对程序代码进行单元测试。单元测试假设我可以单独实例化我的应用程序。在实例化期间,我使用mocks / friendlies连接依赖
打开App,查看更多内容
随时随地看视频慕课网APP