• 技术文章 >Java >java教程

    Java关键字之finalize使用的示例代码

    黄舟黄舟2017-03-15 13:24:27原创1224

    Java中提供了finalize方法,在垃圾回收器在进行内存释放时会首先调用finalize,但会有一些误区。

    1)、对象可能不被垃圾回收。

    2)、垃圾回收并不等于"析构",finalize不是析构函数

    3)、垃圾回收只与内存有关。

    4)、垃圾回收和finalize都是靠不住的,只要JVM还没有到内存耗尽的地步,它是不会浪费时间进行内存回收的。

    finalize的调用前提情况:

    1)、所有对象被Garbage Collection自动调用,比如运行System.gc()的时候

    2)、程序退出时为每个对象调用finalize()方法

    3)、显式的调用finalize方法

    并不建议使用finalize方法完成非内存资源的清理工作,但建议用于:(1)清理本地对象(通过JNI创建的对象)。(2)作为确保

    某些非内存资源的释放(socket,文件,端口等等)

    finalize()方法的通用格式:

    protected void finalize()
    {
        //finalization code here
    }

    简单示例代码:

    public class FinalizationDemo {
        public static void main(String[] args) {
            Cake c1 = new Cake(1);
            Cake c2 = new Cake(2);
            Cake c3 = new Cake(3);
            c2 = c3 = null;
            System.gc(); //Invoke the Java garbage collector  
        }
    }
    class Cake extends Object {
        private int id;
        public Cake(int id) {
            this.id = id;
            System.out.println("Cake Object " + id + "is created");
        }
        protected void finalize() throws java.lang.Throwable {
            super.finalize();
            System.out.println("Cake Object " + id + "is disposed");
        }
    }

    运行结果:

    Cake Object 1is created
    Cake Object 2is created
    Cake Object 3is created
    Cake Object 3is disposed
    Cake Object 2is disposed


    以上就是Java关键字之finalize使用的示例代码的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Java,finalize
    上一篇:详细了解Java接口和抽象类的区别 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • Java函数式编程实例分析• Go Java算法之解码方法实例代码分析• Java的编译时错误和运行时错误问题怎么解决• 怎么用Java语言打开文件和写入文件• Java Cloneable接口的深拷贝与浅拷贝方法
    1/1

    PHP中文网