类方法与实例方法

时间:2011-07-01 09:09:29

标签: java class instance object-oriented-analysis

您是否通常测量类方法比实例方法更快,因为它不需要加载实例?如果是这样,我们应该尽可能使用类方法吗? 感谢

9 个答案:

答案 0 :(得分:12)

无论什么更快,多少,您都需要记住一个主要的区别:

  • 你不能@Override静态方法!

这非常重要,因为你基本上说你不会,不能,使用Java中的一个主要优点,即重写子类对象中的方法。当您调用静态方法时,您将继续使用该静态方法,并且不能在子类对象中覆盖它。

同样要解决“哪个更快”然后构建一个 REAL 测试,而不仅仅是一个微基准测试来调查实际发现。使用几个JVM进行测量,因为JIT实现可能会影响这一点。

答案 1 :(得分:4)

如果方法不需要实例,IMO应该是一个类方法。并且由于只有在不使用实例的情况下才能使用类方法,因此您的问题是

  

我们应该在何时使用类方法   可能的

有一个肯定的答案。

但绝对不是出于效率原因

答案 2 :(得分:3)

不,他们更快。

但是,尽可能使用类方法是一种很好的做法,因为这表明方法内部的逻辑不需要访问任何成员变量。

我说 - 不要使用实例方法,它们可以是静态的。

答案 3 :(得分:2)

“类方法”可用于类的每个实例,“实例方法”可用于当前实例。所以我不明白为什么类方法在适用于所有内容时会更快......

答案 4 :(得分:2)

答案 5 :(得分:1)

虽然类方法可能更快,但绝对不应该用这种思维方式编写代码。您应该在需要时使用类方法。像Arrays这样的实用程序类就是一个很好的例子返回单身人士的工厂。当您需要访问类的内部时,切勿使用它们。

答案 6 :(得分:1)

在比较类方法和实例方法时,尝试将实例方法视为具有名为this的额外参数的类方法(实际上现在某些语言实现了实例方法)

所以问题就变成了,“如果参数少一个,我的方法会更快吗?”而这个问题确实没有意义,因为参数列表在很大程度上与性能无关。

尝试根据方法的性质以及它所需的数据来确定方法是应该是静态的还是实例的,而不是基于某些过早的性能优势。是的,性能是一项功能,但它不是唯一的功能。

最后一项表现法则:衡量,衡量,衡量。仅仅因为一些书或文章说某些东西应该更快,并不意味着它会对你有用。 在您的实际案例中尝试并使用经验数据进行备份。

答案 7 :(得分:1)

根据我的经验,如果你需要初始化一个对象并以任何方式保留它,例如使用数组等。最好在该特定实例上调用实例方法。
没有必要调用一个类方法,然后将刚刚初始化为同一个实例的实例传递给该类方法。 我不确定运行期间的效果,但这样做似乎是浪费(名义与否)。

我主要使用类方法进行不需要初始化的操作,只要我能。例如,我的MathFunctions类包含了我的三角学方法的所有getter。没有必要初始化和创建MathFunctions对象,然后调用实例方法只是为了从这些方法中获取任意结果。简单地调用类方法更容易(也更快)。

因此,在任何一种情况下,都没有“类方法>实例方法”,反之亦然。这完全取决于您的应用程序和您的需求。 首先使用常识,如果您发现自己初始化具有最小数据的类的对象(例如MathFunctions),那么使用类方法可能会更好。 但另一方面,如果您发现自己初始化对象然后将它们作为参数传递给类方法,那么使用实例方法最有可能会更好。

这是我的两分钱,我对编程还是比较新的,所以记住这一点。

答案 8 :(得分:0)

我一般都不知道,但我记得前一段时间测量某些应用程序,静态方法确实更快。

从设计的角度来看,我认为任何方法都应该是理性的静态(意味着没有明确地将实例作为参数或类似的东西传递),应该是。