下面的代碼是使用匿名類實現的對象的實例化。什麼時候創建並訪問這個匿名類對象,以及何時收集垃圾?
我不清楚的是由匿名類創建的對象的確切生命期。
線
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