黑马程序员技术交流社区

标题: 终结处理和垃圾回收 [打印本页]

作者: 曹艺先-热爱编程    时间: 2012-11-17 22:20
标题: 终结处理和垃圾回收
编写一个名为Temp类,此类的状态可以是“满的”或者是“空的”。其终结条件是:对象被清理时必须处于空状态。编写一个方法以检验终结条件是否成立。在main()中测试Temp可能发生的几种使用方式。
作者: 凊係柈泩    时间: 2012-11-18 12:24
public class Temp {
        //判断标记
        boolean checked = false;

        public Temp(boolean checked) {
                super();
                this.checked = checked;
        }
        void checkInfo(){
                checked = false;
        }
         protected void finalize(){
                if(checked){
                        System.out.println("Error:checked null");
                }else{
                        try {
                                //正常时调用基类finalize();
                                super.finalize();
                        } catch (Throwable e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
        }
}
public class Test {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //创建对象,调用checkInfo方法
                Temp temp = new Temp(true);
                temp.checkInfo();
               
                new Temp(true);
                //强制执行垃圾回收器
                System.gc();
        }

}
我用了finalize()的方法来回收垃圾对象,因为在程序运行完毕后一些对象就变成了垃圾,java并不会马上采用回收机制将这些对象回收,这时我用到了finalize提示让虚拟机立即回收这些垃圾,清理了内容,创建Temp对象调用了checkInfo方法由于程序错误并未执行,并由system.gc强制终止执行垃圾回收器,而第二个对象传入的是真执行了if语句调用了父类finalize方法执行了输出语句




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2