当函数变得中等大时,我通常将其更改为静态。例如,如果类toString()
变得非常大,我通常会将其更改为
public String toString() {
return ClassName.toString(this);
}
private static final String toString(ClassName c_n) {
//.........
}
如果功能不是太大,那么执行此操作是否过度?
修改 的
我在这里被大肆击倒。 :)
我理解一般应该如何使用静态修饰符(对于单例,对于与特定实例无关的内容,对于实用程序函数)。我是从优化的角度来问这个问题:为了避免大型函数的字节代码在内存中复制,对于每个类的实例。我显然错了它的工作原理。
答案 0 :(得分:5)
根据函数的长度使函数静态是完全错误的。静态变量/方法属于类,而不属于实例。
因此,如果实例之间存在共同的功能,而不依赖于任何实例,则它们可以是静态的。
在这里,您已将toString()
设为静态。但是,这种方法应该描述一个实例。将其设为静态将导致容易出错的结果。
调用此方法是否有意义,即使尚未构造任何对象?“如果是这样,它肯定是静态的。否则,应该是实例方法
答案 1 :(得分:3)
如果方法不依赖于声明它的类的实例,则应该创建方法static
。它与函数的长度无关。。
答案 2 :(得分:0)
每个实例不复制代码(方法),它不需要,因为它对所有实例都是相同的,并且不会被修改。
仅复制实例数据(属性)。