对象字段的java终结
我很难理解JavaSE8语言规范第12.6.1节和第12.6.2节的含义。我正在使用一种产品,其中Java对象管理本机对等点,因此正确地完成(直到我们有机会进行ref队列重写)非常重要
从规范来看,很明显,终结器可能会出现故障。这是可达性,我有一个困难的时间
我相信说明书上说:
class A {
public Object o = new Object()
protected synchronized void finalize() throws Throwable { o = null; }
}
class B {
A a = new A()
protected void finalize() throws Throwable {
a.getClass() // always works: a cannot be null.
a.o.getClass() // might NPE: a's finalizer might have been run
}
}
class C {
A a = new A()
protected void finalize() throws Throwable {
synchronized (a) {
a.getClass() // always works: a cannot be null.
a.o.getClass() // always works: a.o cannot be null.
}
}
}
上面有4个断言。我将非常感谢您确认它们是真的,或者解释为什么一个或多个是假的
共 (0) 个答案