2016-06-06 2 views
-1

НапримерЧто такое поведение полей при финализации объекта?

class MyClass { 
    private MyField1 f1; 
    private MyField2 f2; 

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

Когда экземпляр MyClass завершена, является f1 и f2 также завершена? Если MyField1 и MyField2 также имеют финализатор, каков порядок выполнения среди них?

+0

Что вы понимаете ключевое слово 'finalize'? – doctorlove

ответ

1

Нет, f1 и f2 не были автоматически завершены.

Они могут также иметь в виду объекты, которые могут быть запланированы для сбора мусора в то же время, как экземпляр MyClass, предполагая, что ничего не имеет в виду объекты, к которым f1 и f2 имеют в виду.

Добавление явной финализации к классу может помешать с работой в виртуальной машине Java, если вы не принять идиомы:

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