【发布时间】:2021-09-14 01:13:01
【问题描述】:
我在 java 中为特定用例使用了一个静态嵌套类。一个最小的例子如下所示:
public class Foo {
static int fooInner = getInner(); // CASE 1
private static class StaticFoo {
int fooInner = getInner(); // CASE 2
public int useFooInner(){
System.out.println(fooInner);
//do something
}
}
}
问题是案例 1 中的内存分配与案例 2 中的内存分配有何不同?还是一样? 如果我也将案例 2 变量设为静态怎么办。内存使用会不同吗?
注意:请不要提及会发生阴影。虽然我已经将两个变量都放在那里,但这是一个“OR”案例,这就是“CASE”的原因。
PS:我觉得内存使用应该是一样的。由于嵌套类是静态的,因此不会为每个对象创建它,因此实例变量 fooInner(案例 2)也只会创建一次。因此,getInner() 函数将只运行一次。但这只是抽象层面+直觉。一个更具描述性的答案将不胜感激!
【问题讨论】:
-
StaticFoo是否声明static无关紧要,它的实例只会在评估new StaticFoo(…)表达式时创建。由于您的代码中没有任何内容,因此将永远创建StaticFoo的 no 实例,并且在 CASE 2 中永远不会执行getInner(),而不是一次。
标签: java java-8 static static-classes