高手帮忙!JAVA中如何实现C++中析构函数的功能!紧急!!!
本文导语: JAVA没有析构函数,但我想在一个对象被DESTROY时做一些操作,如填写日志等,请问该怎么实现?请给出例子,谢谢!!! | finalize()应该是”Called by the garbage collector“,但何时调用/是...
|
哪个线程来调用是不”保证“的,故最好的方法是自己写自己的close()方法
如果非要用finalize()的话:
java.lang.Object:
protected void finalize() throws Throwable { }
一般来说是在自己的类中override上述方法,比如:
public void finalize(){
super.finalize(); //不要忘了:-)
//释放资源。。。
}
finalize是比较复杂的,涉及到线程/GC/Exception处理等,有专门的文章讨论,
下面是javadoc:
/**
* 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.
*
* The general contract of finalize is that it is invoked
* if and when the JavaTM virtual
* machine has determined that there is no longer any
* means by which this object can be accessed by any thread that has
* not yet died, except as a result of an action taken by the
* finalization of some other object or class which is ready to be
* finalized. The finalize method may take any action, including
* making this object available again to other threads; the usual purpose
* of finalize, however, is to perform cleanup actions before
* the object is irrevocably discarded. For example, the finalize method
* for an object that represents an input/output connection might perform
* explicit I/O transactions to break the connection before the object is
* permanently discarded.
*
* The finalize method of class Object performs no
* special action; it simply returns normally. Subclasses of
* Object may override this definition.
*
* The Java programming language does not guarantee which thread will
* invoke the finalize method for any given object. It is
* guaranteed, however, that the thread that invokes finalize will not
* be holding any user-visible synchronization locks when finalize is
* invoked. If an uncaught exception is thrown by the finalize method,
* the exception is ignored and finalization of that object terminates.
*
* After the finalize method has been invoked for an object, no
* further action is taken until the Java virtual machine has again
* determined that there is no longer any means by which this object can
* be accessed by any thread that has not yet died, including possible
* actions by other objects or classes which are ready to be finalized,
* at which point the object may be discarded.
*
* The finalize method is never invoked more than once by a Java
* virtual machine for any given object.
*
* Any exception thrown by the finalize method causes
* the finalization of this object to be halted, but is otherwise
* ignored.
*
* @throws Throwable the Exception raised by this method
*/
|
gdsean(摇滚java) :tanghuan说的finalize()是Object类的方法,是在类被回收时被垃圾收集程序调用的。try那个是finally。
|
|
|
块做后续处理的,查查文档