无法在不同的Object上调用finalize()方法。我正在使用Eclipse。
我创建了StringBuilder的对象
StringBuilder sb= new StringBuilder("abc");
sb.finalize(); // compile time error The method finalize() from the type Object is not visible
我在每个
中创建了一个带有main方法的2类Test和MyTest public class Test {
public static void main throws Throwable(String [] args ){
Test t= new Test();
t.finalize(); //ok no error
MyTest mt= new MyTest();
mt.finalize() // compile time error The method finalize() from the type Object is not visible
}
}
我有些疑问:
1)由于对象是所有java类的超类,因此必须使用final方法,因为finalize方法受到保护。那为什么eclipse会出现这样的错误?
2)这是eclipse中的一个错误吗?
请有人详细说明这个概念。
答案 0 :(得分:4)
如果您要查看对象的API,您会发现该方法的可见性为protected
NOT public
。
protected修饰符指定只能在其自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问该成员。 source
对于protected
,只允许同一个包或子类中的类访问该方法,否则会导致编译器错误。
public class Test {
public static void main throws Throwable(String [] args ){
Test t= new Test();
t.finalize(); //ok no error
}
}
您要在课程finalize
内拨打Test
,因此finalize
可见,因为Test
隐含地是Object
的子类。
public class Test {
public static void main throws Throwable(String [] args ){
MyTest mt= new MyTest();
mt.finalize() // compile time error The method finalize() from the type Object is not visible
}
}
您在此处调用类MyTest
上的方法,因为这不是来自同一个类,也不是来自java.lang
包中finalize
方法不可见,因此编译错误。
答案 1 :(得分:1)
Object#finalize()
不应该在外部调用。
来自Javadocs
Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. A subclass overrides the finalize method to dispose of system resources or to perform other cleanup.