此外,是否有任何性能优点,以静态的方法实例的方法吗?

我遇到了以下最近: http://www.cafeaulait.org/course/week4/22.html :

应当的方法是静态的?

  1. 既不能读也不是写实例领域
  2. 独立国家的对象
  3. 数学方法接受的论点,申请一个算法的那些 参数,以及返回值
  4. 工厂的方法,提供替代的构造

我将非常感兴趣的反馈堆溢社会在这。

有帮助吗?

解决方案

作方法的静态的时候他们不是部分实例。不要出汗的微优化.

你可能会发现你有很多的私人方法可能是静态的,但你总是呼吁从实例的方法(或每个其他)。在这种情况下,它并不真正的问题很多。然而,如果要实际上能够测试你的码,或许用它来自其他地方,你可能想考虑这些静态的方法在一个不同的是,非instantiable类。

其他提示

是否的方法是静态更多的是一个设计考虑不止一个的效率。一个静态的方法属于一类,其中一个非静态的方法,属于一个对象。如果你有一个数学课的,你可能会有一些静态的方法来处理与加法和减法的,因为这些都是相关联的概念与数学。但是,如果你有一辆车类,可能有一些非静态的方法,以改变和指导,因为这些都是相关的一个具体的汽车,而不是概念的汽车在一般。

另一个问题是静态的方法是,这是很痛苦的编写单元的测试,为他们在Java,至少。你不能嘲笑一个静态的方法以任何方式。还有一个 张贴在谷歌的测试关于这个问题的博客.

我的法则是写静态的方法,只有当他们有没有外部的依赖(如数据库的访问、读取文件、电子邮件等),以让他们尽可能简单。

@jagmal我想你已经有了一些电线穿过某个地方,所有的示例清单显然不是静态的方法。

静态的方法应当处理完全有的抽象性质和概念的一类-他们不应以任何方式涉及到实例的具体属性的(和最编译器将会大喊如果他们做)。

对于汽车的例子中,速度、公驱动显然属性有关。换档和速度计算,认为当时车上一级,属性依赖,但考虑一个carModel类继承的车:在这一点上theyy可能成为静态的方法,因为所需的属性(例如轮径)可以定义为常量在这一水平。

只要记住,每当你正在写一个静态的方法,你正在写一个灵活的方法,该方法无法有它的行为修改非常容易。

你写的程序码,因此,如果它是有意义的进程,然后这样做。如果没有,它应该是一个实例的方法。

这个想法是从 一篇文章,通过史蒂夫Yegge, 我认为是一个有趣和有用的阅读。

表现的明智的、C++静态的方法可以稍微快于非虚拟方法的实例,因为没有需要一种'这个'指针获得通过的方法。反过来,双方将以更快的速度比虚拟的方法没有VMT查找所需要的。

但是,它很可能就下来的噪音,特别是对于其语言允许不必要的参数通过进行优化。

这里是一个相关的讨论 为什么串。格式是静态的 这将突出一些的原因。

另一件事时要考虑的方法是静态的,任何人都能看到类是能叫一个静态的方法。而当的方法是一个实例法,只有那些有访问一个实例是能够调用这一方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top