为了账号安全,请及时绑定邮箱和手机立即绑定

Java:何时使用静态方法

Java:何时使用静态方法

Java:何时使用静态方法我想知道何时使用静态方法?假设我有一个带有几个getter和setter的类,一个或两个方法,我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法?例如Obj x = new Obj();x.someMethod要么Obj.someMethod(这是静态方式吗?)我很困惑!
查看完整描述

4 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

一个经验法则:问问自己“即使没有构建Obj,这个方法也有意义吗?” 如果是这样,那肯定是静态的。

所以在一个类中Car你可能有一个double convertMpgToKpl(double mpg)静态的方法,因为人们可能想知道35mpg转换成什么,即使没有人建造过汽车。但是void setMileage(double mpg)(设置一个特定Car的效率)不能是静态的,因为在构建任何Car之前调用该方法是不可思议的。

(顺便说一下,反过来并不总是这样:你有时可能有一个涉及两个Car对象的方法,但仍然希望它是静态的。例如Car theMoreEfficientOf( Car c1, Car c2 )。虽然这可以转换为非静态版本,但有些人会认为,因为那里不是一个“特权”选择,其中Car更重要,你不应该强迫调用者选择一个Car作为你将调用方法的对象。这种情况只占所有静态方法的一小部分,虽然。)


查看完整回答
反对 回复 2019-05-29
?
慕容森

TA贡献1853条经验 获得超18个赞

仅在以下方案中定义静态方法:

  1. 如果您正在编写实用程序类,则不应更改它们。

  2. 如果方法未使用任何实例变量。

  3. 如果任何操作不依赖于实例创建。

  4. 如果有一些代码可以被所有实例方法轻松共享,请将该代码提取到静态方法中。

  5. 如果您确定永远不会更改或覆盖方法的定义。由于静态方法无法被覆盖。


查看完整回答
反对 回复 2019-05-29
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

在阅读了Misko的文章后,我认为从测试的角度看静态方法是不好的。你应该有工厂(可能使用像Guice这样的依赖注入工具)。

我怎样才能确保我只有一件东西

只有一个东西“如何确保我只有一个东西”的问题很好地回避了。您只在main中实例化一个ApplicationFactory,因此,您只实例化所有单例的单个实例。

静态方法的基本问题是它们是过程代码

静态方法的基本问题是它们是过程代码。我不知道如何对程序代码进行单元测试。单元测试假设我可以单独实例化我的应用程序。在实例化期间,我使用mocks / friendlies连接依赖


查看完整回答
反对 回复 2019-05-29
  • 4 回答
  • 0 关注
  • 4157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信