您的位置:首页 > 其它

final、finally和finalize的区别

2017-01-07 00:36 351 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: