Java - 实例变量在同一线程中神秘地变为 null
Java - instance variables mysteriously becoming null in same thread
我在 Java 中遇到了一些让我绞尽脑汁想弄清楚发生了什么的事情。
我创建了一个对象 objA 并在其构造函数中将此对象添加到另一个对象 objB:
objB.addListener(this);
稍后在objA上调用一个方法,它调用objB中的一个方法,然后在objA上回调:
objA.doSomething() => objB.doSomethingAlso => objA.doSomethingElse()
objA.doSomething();
在对象A中:
public void doSomething() {
_instanceVar = initInstanceVar();
objB.doSomethingAlso();
}
在 objB 中:
public void doSomethingAlso() {
...
getRefToObjA().doSomethingElse();
}
再次在 objA 中:
public void doSomethingElse() {
_instanceVar.someMethod();
}
但是,当调用 doSomethingElse() 时,_instanceVar(实例变量!)现在为空。它在 doSomething() 中被初始化为一个非空值...那么它现在怎么可能为空呢?它没有在任何地方明确设置为空。所有这些方法调用(据我所知)都发生在同一个线程中。
我在这里错过了什么?该实例变量怎么可能为空?
这里只能发生两件事
initInstanceVar();
returns 空
- 变量以某种方式被垃圾收集器清理
我在 Java 中遇到了一些让我绞尽脑汁想弄清楚发生了什么的事情。
我创建了一个对象 objA 并在其构造函数中将此对象添加到另一个对象 objB:
objB.addListener(this);
稍后在objA上调用一个方法,它调用objB中的一个方法,然后在objA上回调:
objA.doSomething() => objB.doSomethingAlso => objA.doSomethingElse()
objA.doSomething();
在对象A中:
public void doSomething() {
_instanceVar = initInstanceVar();
objB.doSomethingAlso();
}
在 objB 中:
public void doSomethingAlso() {
...
getRefToObjA().doSomethingElse();
}
再次在 objA 中:
public void doSomethingElse() {
_instanceVar.someMethod();
}
但是,当调用 doSomethingElse() 时,_instanceVar(实例变量!)现在为空。它在 doSomething() 中被初始化为一个非空值...那么它现在怎么可能为空呢?它没有在任何地方明确设置为空。所有这些方法调用(据我所知)都发生在同一个线程中。
我在这里错过了什么?该实例变量怎么可能为空?
这里只能发生两件事
initInstanceVar();
returns 空- 变量以某种方式被垃圾收集器清理