首页 > Java > 在java中,何时使用静态方法?

在java中,何时使用静态方法?

上一篇 下一篇

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

例:

Obj x = new Obj();
x.someMethod();

…艺术

Obj.someMethod(); // Is this the static way?

我比较困惑!

分割线

网友回答:

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

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

分割线

网友回答:

一个经验法则:问问自己“即使还没有构造对象,调用此方法是否有意义?如果是这样,它绝对应该是静态的。

因此,在类中,您可能有一个方法:Car

double convertMpgToKpl(double mpg)

…这将是静态的,因为人们可能想知道 35mpg 转换为什么,即使没有人曾经构建过.但是这种方法(它设置了一个特定的效率):CarCar

void setMileage(double mpg)

…不能是静态的,因为在构造任何方法之前调用该方法是不可想象的。Car

(顺便说一下,反之亦然:有时你可能有一个涉及两个对象的方法,但仍然希望它是静态的。 例如:Car

Car theMoreEfficientOf(Car c1, Car c2)

虽然这可以转换为非静态版本,但有些人会争辩说,由于没有一个“特权”选择哪个更重要,你不应该强迫调用者选择一个作为你将调用该方法的对象。但是,这种情况在所有静态方法中只占相当小的一部分。CarCar

分割线

网友回答:

使用静态方法有一些正当的理由:

  • 性能:如果您希望运行某些代码,并且不想实例化额外的对象来执行此操作,请将其推入静态方法。JVM还可以优化静态方法(我想我曾经读过James Gosling声明你不需要JVM中的自定义指令,因为静态方法同样快,但找不到源代码 – 因此它可能完全错误)。是的,这是微优化,可能不需要。我们程序员从来不会因为很酷而做不需要的事情,对吧?
  • 实用性:而不是调用、调用或静态导入。更容易,更短。new Util().method(arg)Util.method(arg)method(arg)
  • 添加方法:你真的希望类 String 有一个实例方法,但它不存在(它不应该,因为你项目的特殊字符可能与其他项目的特殊字符不同),并且你不能添加它(因为 Java 有点理智),所以你创建一个实用程序类,并调用而不是 .甜。removeSpecialChars()removeSpecialChars(s)s.removeSpecialChars()
  • 纯度:采取一些预防措施,您的静态方法将是一个纯函数,也就是说,它唯一依赖的是它的参数。数据输入,数据输出。这更易于阅读和调试,因为您不需要担心继承怪癖。您也可以使用实例方法执行此操作,但编译器将使用静态方法(通过不允许引用实例属性、重写方法等)为您提供更多帮助。

如果要创建单例,还必须创建一个静态方法,但是…不要。我的意思是,三思而后行。

现在,更重要的是,为什么你不想创建一个静态方法?基本上,多态性消失了。您将无法覆盖该方法,也无法在接口中声明它Java 8 之前)。它需要您的设计具有很大的灵活性。此外,如果你需要状态,如果你不小心,你最终会遇到很多并发错误和/或瓶颈。

模板简介:该模板名称为【在java中,何时使用静态方法?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 211次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-02
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信模板 微信素材 企业网站 html5 响应式 微信公众平台 微信文章 微信图片 单页式简历模板 自适应
您可能会喜欢的其他模板