final、finally和finalize的区别
2017-09-21 14:29
162 查看
1.final关键字
定义变量,包括静态的和非静态的。
定义方法的参数。
定义方法。
定义类。
修饰变量
变量一旦被初始化便不可改变(对于基本类型,指的是值不变;对于对象类型,指的是引用不变),初始化只可能在两个地方:定义处和构造函数。
修饰方法参数
对于基本类型,定义成final参数没有什么意义,因为基本类型就是传值,不会影响调用语句中的变量;对于对象类型,在方法中如果参数确认不需要改变时,定义成final参数可以防止方法中无意的修改而影响到调用方法。
修饰方法
当final用来定义一个方法时,表示这个方法不可以被子类重写,但不影响子类继承。
修饰类
不可继承(我们最常用的String类就是final的。由于final类不允许被继承,编译器在处理时把它的所有方法都当作final的,因此final类比普通类拥有更高的效率。)注:抽象类含有必须由继承自它的子类重载实现的抽象方法,因此无法同时用final和abstract来修饰同一个类。同样的道理,final也不能用来修饰接口。
2、finally
异常处理关键字,finally中的主体总会执行,不管异常发生是否。
try语句在返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally中的语句,而后分为以下三种情况:
情况一:如果finally中有return语句,则会将try中的return语句”覆盖“掉,直接执行finally中的return语句,得到返回值,这样便无法得到try之前保留好的返回值。
情况二:如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。
情况三:如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况,:
如果return的数据是基本数据类型,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。
如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。
3.finalize
finalize是一个方法,属于java.lang.Object类,它的定义如下:
参考:
java面试之Final、finally、finalize区别
final、finally和finalize的区别
定义变量,包括静态的和非静态的。
定义方法的参数。
定义方法。
定义类。
修饰变量
变量一旦被初始化便不可改变(对于基本类型,指的是值不变;对于对象类型,指的是引用不变),初始化只可能在两个地方:定义处和构造函数。
修饰方法参数
对于基本类型,定义成final参数没有什么意义,因为基本类型就是传值,不会影响调用语句中的变量;对于对象类型,在方法中如果参数确认不需要改变时,定义成final参数可以防止方法中无意的修改而影响到调用方法。
修饰方法
当final用来定义一个方法时,表示这个方法不可以被子类重写,但不影响子类继承。
修饰类
不可继承(我们最常用的String类就是final的。由于final类不允许被继承,编译器在处理时把它的所有方法都当作final的,因此final类比普通类拥有更高的效率。)注:抽象类含有必须由继承自它的子类重载实现的抽象方法,因此无法同时用final和abstract来修饰同一个类。同样的道理,final也不能用来修饰接口。
2、finally
异常处理关键字,finally中的主体总会执行,不管异常发生是否。
try语句在返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally中的语句,而后分为以下三种情况:
情况一:如果finally中有return语句,则会将try中的return语句”覆盖“掉,直接执行finally中的return语句,得到返回值,这样便无法得到try之前保留好的返回值。
情况二:如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。
情况三:如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况,:
如果return的数据是基本数据类型,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。
如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。
3.finalize
finalize是一个方法,属于java.lang.Object类,它的定义如下:
protected void finalize() throws Throwable { }finalize()方法是GC(garbage collector)运行机制的一部分。 finalize()方法是在GC清理它所从属的对象时被调用的,如果执行它的过程中抛出了无法捕获的异常(uncaught exception),GC将终止对改对象的清理,并且该异常会被忽略;直到下一次GC开始清理这个对象时,它的finalize()会被再次调用。
参考:
java面试之Final、finally、finalize区别
final、finally和finalize的区别
相关文章推荐
- java中的final、finally,finalize的区别
- final,finally和finalize的区别
- final、finally、finalize的区别
- Java中final、finally和finalize的区别
- final,finally,finalize的区别
- final finally finalize 的区别
- Java基础查漏补缺:final、finally和finalize的区别
- final、finally和finalize的区别
- Java中final、finally、finalize的区别
- IO流_面试题之final,finally和finalize的区别、面试题之如果在finally之前有return
- final,finally,finalize的区别?
- final,finally,finalize的区别
- final, finally, finalize的区别。
- Java中final,finalize和finally的区别
- final、finally、finalize的区别
- ==与equals的区别,try......catch......finally,final、finally、 finalize的区别
- final/finally/finalize的区别
- final、finally、finalize的区别
- java之final、 finally和 finalize的区别
- Java中的final, finally, finalize的区别