final、finally和finalize的区别

来源:互联网 发布:联通 套餐 4g数据副卡 编辑:程序博客网 时间:2024/06/10 17:10

1.fianl主要用于修饰类、变量和方法,其中修饰的类为不可变类,该类不可以被继承

public final class finalClass{    ...}

修饰的方法不可以被重写

public final void finalMethod(){    ...}

修饰的变量为变常量,这种变量经过一次初始化之后就不能在被修改值了。初始化final变量有四种情况:

1.所有的final变量都可以在定义的时候就初始化public final int a = 1;public static final int sa = 1;2.非静态final变量可以在非静态初始化块中初始化,不可以在静态初始化块中被初始化public final int b;{    a = 1;}3.静态final变量与上面的情况相反public static final int sb;static{    sb = 1;}4.非静态final变量可以在构造方法中被初始化,但是静态final变量不可以public final int c;public A(){    c = 1;}

2.fianlly用于处理异常捕获的try/catch语句中,不管try/catch语句最终会怎样,finally语句的内容都会被执行,就算是return也会在return之前执行finally语句块里面的内容

try{    throw new Exception("自定义异常");}catch(Exception e){    System.out.println(e.getMessage());}finally{    System.out.println("就算你抛出了异常,也不能打断我的执行");}

3.fianlize是一个方法,它的原生类是java.lang.Object类,该方法是GC运行机制的一部分,在GC清理它所从属的对象时自动调用,如果执行它的过程中抛出了无法捕获的异常,GC将会终止对这个对象的清理,直到下一次GC才会继续调用finalize方法对这个对象进行清理

public class defineClass{    @Override    public void finalize(){        System.out.println("执行了finalize方法");    }    public static void main(String[] args){        defineClass dc = new defineClass();        dc = null;        //调用GC        System.gc();        //也可以Runtime.getRuntime().gc();    }}

这是java的面试题,参照出处:http://lib.csdn.net/article/javase/43743

0 0
原创粉丝点击