A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹艺先-热爱编程 中级黑马   /  2012-11-17 22:20  /  1430 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编写一个名为Temp类,此类的状态可以是“满的”或者是“空的”。其终结条件是:对象被清理时必须处于空状态。编写一个方法以检验终结条件是否成立。在main()中测试Temp可能发生的几种使用方式。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

1 个回复

倒序浏览
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方法执行了输出语句

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马