根据静态成员的概念,当第一次调用它的类时,它们被创建/加载到内存中。它们在该类的所有实例中都很常见。意味着它们不会被重新创建或重新初始化等。此外,它们只能通过类名访问。不需要为该类创建对象来访问它们。
现在我的问题是;
答案 0 :(得分:6)
1)静态成员只有在定义它们的类本身被收集时才被垃圾收集;这反过来只有在收集定义的ClassLoader时才会发生。这在Web应用程序容器和插件体系结构中很常见。
2)是的,定义大量静态数据可能是一个坏主意。但它就像很多其他的东西:如果你需要它会很好,如果你滥用它会很糟糕。只需使用常识。
3)同样,一个定义了一千个字符串数组的接口将是一个坏主意,但当然这通常不是人们所做的。只需使用常识。一般来说,没有(与内存相关的)理由来避免静态变量。
答案 1 :(得分:1)
是肯定的。没有GC会清理静态变量。这很重要,否则就不能依赖存储在静态变量中的值。像“Singleton”这样的设计模式依赖于静态变量。
静态变量占用与实例变量中存储的相同值的mem,因此只要存储在变量中的值对于abblication确实是必需的,静态变量中就没有特定的存储开销。但是,当谈到线程安全等时,使用静态变量所产生的副作用需要更多地考虑到内存问题。
是肯定的。但是Interfaces用于描述提供者和用户之间的功能合同,而不是用于存储任何数据。
答案 2 :(得分:0)
不,他们是在课堂上收集的。
开销比较什么?有什么替代方案?
是的,但是没有人说你必须用静态成员来填补它们。