我对 java 成员变量及其在可达方面的声明类感到困惑。比方说,
- TestP 类有TestC 类型成员变量c1。
- 主类引用了TestP p,也引用了p.c1;(
makeP()
) - 但是在 p1 引用被删除后(
clearP()
),
即使 p1.c1 可以访问,p1 也会被垃圾收集。
Intesting 事情是,如果 c1 覆盖某些方法(或者甚至只是打开和关闭括号) p1 不会被垃圾收集。我想这是因为 c1 使用了一些 TestP 区域......但一些明确的解释将不胜感激。
public class Main {
TestP p;
TestC c;
void makeP { p = new TestP(); c = p.c1; }
void clearP { p = null; }
}
public class TestP {
public TestC c1;
public TestP() {
c1 = new TestC(); // TestP will be garbage-collected.
// c1 = new TestC() {}; // TestP will not be garbage-collected.
}
...
}
public class TestC {
public TestC() {}
}