由于静态字段对象是在类级别创建的(并且对所有对象都是通用的),因此特定字段上的静态导入并继承(使用实现)所有字段是否会创建相同数量的内存?
例如,在下面的 propgram 中创建了多少个 MyOwn 对象?
class MyOwn{}
public interface ConstantIfc {
public final static MyOwn REF = new MyOwn();
}
class A implements ConstantIfc {}
class B implements ConstantIfc {}
public class c {
public static void main(String... arg) {
A refA = new A();
B refB = new B();
}
}
如果相同的话,静态导入的最终常量类如何比常量接口(interface)更好?
更新:
我知道最好避免常量继承。不正确地利用实现继承通常会导致设计不灵活。所以我们可以更好地静态导入类/接口(interface)。但接口(interface)仍然是一种抽象,为了保持抽象,它们不应该包含实现细节(包括常量变量)。接口(interface)也经常用于描述不属于实现细节的公共(public) API。因此,将常量数据放入类而不是接口(interface)中是有意义的。谢谢罗杰布。
最佳答案
在您给出的示例中,仅创建了一个 MyOwn
对象。它是在您的程序第一次加载 ConstantIfc
接口(interface)时创建的。
即使您使用静态导入,答案仍然是相同的。静态导入不应该在性能方面比接口(interface)中的常量更好。它们被引入到语言中是为了避免接口(interface),它们所做的只是定义常量,从未用作接口(interface)(没有变量与它们一起键入),从而引起困惑。
关于java - 继承静态字段如何影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8697767/