下面的代码是使用匿名类实现的对象的实例化。什么时候创建并访问这个匿名类对象,以及何时收集垃圾?
我不清楚的是由匿名类创建的对象的确切生命期。
线
PictureCallback jpegCallback;
创建PictureCallback类型的变量和名字jpegCallback分配给它。这个变量是MainClass类的成员变量。
接下来它实例化一个PictureCallback类型的新对象并将其存储到jpegCallback变量中。
我不明白什么时候执行这段代码。因为PictureCallback jpegCallback变量是MainClass的成员,所以它看起来像在MainClass由类加载器加载时一样,同时它也是MainClass的其他成员变量和静态变量。
因此,如果这是真,那么PictureCallback匿名类必须以同样的方式作为静态内部类或静态变量来创建。在运行时开始。
匿名对象必须像静态一样存在,因为如果它在运行时的中间停止存在,那么如果调用回调方法,则覆盖方法中定义的操作不会发生,因为该对象不再存在。
我最好的猜测是,这个对象像一个静态对象创建为MainClass被加载并继续进行,直到MainClass被破坏。
有人可以解释什么时候这个匿名类对象存在,什么时候它被垃圾收集器清除或不再可访问?
public class MainClass extends Activity {
PictureCallback jpegCallback = new PictureCallback() {
@Override void onPictureTaken(byte[], data, Camera camera){
// some action performed
}
}
} // end of MainClass
是的。我忘了......创建静态变量和实例变量之间存在巨大差异。 – Kevik