final、finally、finalize

来源:互联网 发布:有猫脸的拍照软件 编辑:程序博客网 时间:2024/06/06 05:42

一、final是修饰符

修饰类的时候,类不可以被继承

修饰成员函数的时候,成员函数不可以被重写,多态机制被破坏。

修饰成员变量的时候,1:基本数据类型,代表不可更改。2:引用数据类型,引用不可更改,引用的对象是可以更改的

二、finally语句块

try--catch--finally

finally最终被执行的部分,一般用来进行资源关闭清理的操作,

public class FinalTest {    public static int getInt(){        int i=10;        try{            return ++i;        }finally {            System.out.println("will deal with i");            i=100;        }    }    public static void main(String args[]){        System.out.println(getInt());        try{            return;        }finally {            System.out.println("wo le ge qu");        }    }}
这段代码是一个面试题,在方法getInt,try块中执行return 语句,返回++i的值,这个时候的值是11,finally在return之前被调用了,执行了i=100的操作,开始会认为是100或者是101,事实证明是11,无论你返回的是interger引用类型还是int基本数据类型。记录的是返回时刻的引用,除非把i值封装在一个类的成员变量里面,理解引用。

三、finalize:

垃圾回收并不等于析构,因此垃圾回收并不保证一定会执行,执行的时候会调用finalize的方法,垃圾回收本身也有开销,策略就是,程序没有濒临用完的话,不会执行,程序执行结束,自然会退出,将资源交付。
那什么时候用?----本地方法中,调用c或c++的代码,malloc函数分配内存,必须手动调用free,否则会造成内存泄漏的问题

0 0
原创粉丝点击