完成对象时字段的行为是什么?
What's the behaviors of fields when finalize an object?
例如
class MyClass {
private MyField1 f1;
private MyField2 f2;
@override
protected void finalize() throws Throwable {
System.out.println("MyClass finalized.");
}
}
当MyClass
的实例完成时,f1
和f2
是否也完成了?
如果MyField1
和MyField2
也有终结器,它们之间的执行顺序是什么?
不,f1
和 f2
不会自动完成。
它们很可能指的是可以与 MyClass
的实例同时安排进行垃圾回收的对象,假设没有其他对象指的是 f1
和f2
正在引用。
向 class 添加显式终结器可能会干扰 JVM 的工作,除非您采用以下习惯用法:
protected void finalize() throws Throwable {
try {
/*your finalize code*/
} finally {
super.finalize();
}
}
例如
class MyClass {
private MyField1 f1;
private MyField2 f2;
@override
protected void finalize() throws Throwable {
System.out.println("MyClass finalized.");
}
}
当MyClass
的实例完成时,f1
和f2
是否也完成了?
如果MyField1
和MyField2
也有终结器,它们之间的执行顺序是什么?
不,f1
和 f2
不会自动完成。
它们很可能指的是可以与 MyClass
的实例同时安排进行垃圾回收的对象,假设没有其他对象指的是 f1
和f2
正在引用。
向 class 添加显式终结器可能会干扰 JVM 的工作,除非您采用以下习惯用法:
protected void finalize() throws Throwable {
try {
/*your finalize code*/
} finally {
super.finalize();
}
}