谈谈final, finally, finalize的区别
2015-10-19 09:07
337 查看
一、final
用于以下四个地方:定义变量,包括静态的和非静态的。
定义方法的参数。
定义方法。
定义类。
如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在new一个对象时初始化(即只能在声明变量或构造器或代码块内初始化),而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能覆盖(重写)。
final 修饰的是一个基本类型,表示这个变量被赋予的值是不可变的,即它是个常量;如果 final修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,这里需要提醒大家注意的是,不可改变的只是这个变量所保存的引用,并不是这个引用所指 向的对象。 final的含义与第一种情况相同。如果一个变量或方法参数被 final 修饰,就表示它只能被赋值一次,但是 JAVA虚拟机为变量设定的默认值不记作一次赋值。 被 final 修饰的变量必须被初始化。初始化的方式有以下几种:
在定义的时候初始化。final 变量可以在初始化块中初始化,不可以在静态初始化块中初始化。 静态 final变量可以在静态初始化块中初始化,不可以在初始化块中初始化。 final 变量还可以在类的构造器中初始化,但是静态 final变量不可以。 编译器在处理 private 方法时,是按照 final 方法来对待的,这样可以提高该方法被调用时的效率。不过子类仍然可以定义同父类中的 private 方法具有同样结构的方法,但是这并不会产生重写的效果,而且它们之间也不存在必然联系。 最后我们再来回顾一下 final
用于类的情况。这个大家应该也很熟悉了,因为我们最常用的String 类就是 final 的。由于 final 类不允许被继承,编译器在处理时把它的所有方法都当作 final 的,因此final 类比普通类拥有更 高的效率。final 的类的所有方法都不能被重写,但这并不表示 final的类的属性(变量)值也是不可改变的, 要想做到 final 类的属性值不可改变,必须给它增加 final 修饰。
二、finally
在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。finally 是try后面的语句块之一,无论异常是否抛出,都会执行的语句块
三、finalize
方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。注意:finalize不一定被jvm调用,只有当垃圾回收器要清除垃圾时才被调用。finalize()方法的作用是什么呢? finalize()方法是在 GC清理它所从属的对象时被调用的,如果执行它的过程中抛出了无法捕获的异常 (uncaught exception),GC将终止对改对象的清理,并且该异常会被忽略;直到下一次 GC 开始清理这个对 象时,它的 finalize()会被再次调用。 由于finalize()属于 Object 类,因此所有类都有这个方法,Object 的任意子类都可以重写(override)该方法,在其中释放系统资源或者做其它的清理工作,如关闭输入输出流。
通过以上知识的回顾,我想大家对于final、finally、finalize 的用法区别已经很清楚了。
相关文章推荐
- JavaScript,数组和函数传参 笔记
- ubuntu14.04通过dante搭建匿名socks5代理
- 写入文本
- mybitas 执行insert 语句后获取当前插入行的主键!
- ssoj2279: 磁力阵(IDA*)
- Linux 4.3 内核增加了 MOST 驱动子系统
- IOS下得文件读写操作
- 猫猫学iOS之ipad开发Popover的基本使用
- Python常识
- POST和GET比较
- Xcode常见错误 与 警告
- UI15_XML, JSON解析
- AsyncTask
- hdoj 1051 Wooden Sticks
- 用Tag区分Click事件(为动态生成的页面添加onClick事件)
- 产品新版本上线笔记分享
- 一步步开发自己的博客 番外篇(7、异步记录日志 和 文章阅读量统计)
- 开题报告
- HBase分布式部署
- [Procedure]Oracle之分页存储过程