final、finally和finalize的区别
来源:互联网 发布:asp微信接口源码 编辑:程序博客网 时间:2024/06/07 01:29
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类,它的定义如下:
protected void finalize() throws Throwable { }finalize()方法是GC(garbage collector)运行机制的一部分。 finalize()方法是在GC清理它所从属的对象时被调用的,如果执行它的过程中抛出了无法捕获的异常(uncaught exception),GC将终止对改对象的清理,并且该异常会被忽略;直到下一次GC开始清理这个对象时,它的finalize()会被再次调用。
参考:
java面试之Final、finally、finalize区别
final、finally和finalize的区别
- final 和finally和finalize的区别
- final、finally和finalize的区别[转载]
- final、finally和finalize的区别
- final、finally和finalize的区别是什么?
- final、finally和finalize的区别是什么?
- final、finally和finalize的区别
- final、finally和finalize的区别
- final、finally和finalize的区别是什么?
- final、finally和finalize的区别是什么?
- final、finally和finalize的区别
- final、finally和finalize的区别是什么?
- final、finally和finalize的区别是什么?
- 详解final、finally和finalize的区别
- final、finally和finalize的区别
- final、finally和finalize的区别是什么?
- final、finally和finalize的区别
- final和finally,finalize的区别
- final、finally和finalize的区别是什么?
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
- spring.profiles.active 针对多种启动环境的spring配置
- 在Homestead虚拟机上安装laravel5.5
- 学习ThreadLocal
- MFC简单的串口使用
- final、finally和finalize的区别
- jQuery-事件绑定
- RabbitMQ-JAVA常见报错信息
- Android JNI开发(6)--JNI中使用线程
- HashMap、HashTable、LinkedHashMap、TreeMap、HashSet简单总结
- Highcharts 制作仪表盘 gauge
- list去重操作
- RMAN参数详解
- 大数据从业人员必须了解的2张图