finalize不行吧,那是try catch{}
块做后续处理的,查查文档

解决方案 »

  1.   

    tanghuan是对的。
    gdsean(摇滚java) :tanghuan说的finalize()是Object类的方法,是在类被回收时被垃圾收集程序调用的。try那个是finally。
      

  2.   

        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 <code>finalize</code> method to dispose of
         * system resources or to perform other cleanup. 
         * <p>
         * The general contract of <tt>finalize</tt> is that it is invoked 
         * if and when the Java<font size="-2"><sup>TM</sup></font> 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 <tt>finalize</tt> method may take any action, including
         * making this object available again to other threads; the usual purpose
         * of <tt>finalize</tt>, 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. 
         * <p>
         * The <tt>finalize</tt> method of class <tt>Object</tt> performs no 
         * special action; it simply returns normally. Subclasses of 
         * <tt>Object</tt> may override this definition.
         * <p>
         * The Java programming language does not guarantee which thread will 
         * invoke the <tt>finalize</tt> 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.
         * <p>
         * After the <tt>finalize</tt> 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.
         * <p>
         * The <tt>finalize</tt> method is never invoked more than once by a Java
         * virtual machine for any given object.
         * <p>
         * Any exception thrown by the <code>finalize</code> method causes 
         * the finalization of this object to be halted, but is otherwise 
         * ignored. 
         *
         * @throws Throwable the <code>Exception</code> raised by this method
         */
      

  3.   

       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 <code>finalize</code> method to dispose of
         * system resources or to perform other cleanup. 
         * <p>
         * The general contract of <tt>finalize</tt> is that it is invoked 
         * if and when the Java<font size="-2"><sup>TM</sup></font> 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 <tt>finalize</tt> method may take any action, including
         * making this object available again to other threads; the usual purpose
         * of <tt>finalize</tt>, 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. 
         * <p>
         * The <tt>finalize</tt> method of class <tt>Object</tt> performs no 
         * special action; it simply returns normally. Subclasses of 
         * <tt>Object</tt> may override this definition.
         * <p>
         * The Java programming language does not guarantee which thread will 
         * invoke the <tt>finalize</tt> 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.
         * <p>
         * After the <tt>finalize</tt> 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.
         * <p>
         * The <tt>finalize</tt> method is never invoked more than once by a Java
         * virtual machine for any given object.
         * <p>
         * Any exception thrown by the <code>finalize</code> method causes 
         * the finalization of this object to be halted, but is otherwise 
         * ignored. 
         *
         * @throws Throwable the <code>Exception</code> raised by this method
         */
      

  4.   

    数据库的关闭能不能放在finalize()里?
      

  5.   

    hahaha88(忧郁的眼神,稀嘘的胡子喳):
     
    你说的方法不知到我是没有理解还是怎么的,好象行不通。还有,自己编写CLOSE函数怎么保证它在对象销毁的时候被调用?因为这个对象我希望它从被创建后是一直在内存中运行,直到关机。但如果出现以外情况我希望被记录在日志中(如:断电、程序异常终止)。具体情况是我正在研究一个连接池的问题,这个例子是在《JAVA服务器高级编程》的第九章,不知有那位高手曾经看过?我不知道究竟在JSP中该如何使用这个连接池——我给它做了个用JSP调用的JAVABEAN接口,但该如何使用它提供的release方法呢?这个方法该怎么用呢?因为按照我的理解连接池的poolmanager(管理连接池的对象)一但创建就应该一直在内存中运行,那么它提供的release方法何时用呢?所以我现在就没有调用他的release方法,而是想在poolmanager对象被(由于什么原因)销毁的时候做一些扫尾工作!
    请高手帮忙,谢谢!紧急!如需要这个连接池的原码我可以贴出来!!
      

  6.   

    还有个很菜的问题,java中如何编写程序销毁一个对象(即类的实例)?是不是所有的类都相同!