2016-06-06 8 views
-1

Zum BeispielWie verhalten sich Felder beim Finalisieren eines Objekts?

class MyClass { 
    private MyField1 f1; 
    private MyField2 f2; 

    @override 
    protected void finalize() throws Throwable { 
    System.out.println("MyClass finalized."); 
    } 
} 

Wenn eine Instanz von MyClass abgeschlossen werden f1 und f2 auch finalisiert? Wenn MyField1 und MyField2 auch Finalizer haben, was ist die Ausführungsreihenfolge zwischen ihnen?

+0

Was verstehen Sie unter dem Stichwort 'finalize'? – doctorlove

Antwort

1

Nein, f1 und f2 werden nicht automatisch finalisiert.

Sie auch auf Objekte mit Bezug können, die für die Garbage Collection zur gleichen Zeit wie eine Instanz von MyClass geplant werden könnten, vorausgesetzt, dass nichts anderes auf die Objekte bezieht werden, auf die f1 und f2 beziehen.

Hinzufügen einen expliziten Finalizerthread zu einer Klasse mit der Funktionsweise des JVM stören kann, wenn Sie das Idiom annehmen:

protected void finalize() throws Throwable { 
    try { 
     /*your finalize code*/ 
    } finally { 
     super.finalize(); 
    } 
} 
Verwandte Themen