浅析java中final,finally,finalize
来源:互联网 发布:tp886 访客网络 编辑:程序博客网 时间:2024/05/23 16:02
1. final
final可以用于控制成员,方法,或者是一个类是否可以被覆写或者继承等功能,这些特点使final在java中拥有一个不可或缺的位置,也是学习java必须要掌握的关键字之一
(1)final成员
当在类中定义变量时候,若在前面添加final关键字,那就是说,这个变量一旦被初始化,便不可改变。这里的不可改变指的是对基本类型来说
是其值不可变,而对于变量类型来说,是其引用不能改变。其初始化可以再两个地方,一是其定义处,二是在构造函数中,二者只能选其一。
还有一种用法是定义方法中的参数为final。对于基本类型的变量,这样做没有什么实际意义,因为基本类型基本类型的变量在调用方法时是传值的。
也就是说你可以在方法中更改这个参数变量而不会影响到调用语句。然而对于对象变量,却显得很实用,因为对象变量在传递值得时候是传递他的引用的,
这样你在方法中对对象变量的修改也会影响到调用语句中的对象变量。当你在方法中不需要改变作为参数的对象变量时,明确使用final进行声明,回防止你无意的修改
而影响调用方法。
(2)final方法
将方法声明为final有两个原因,第一个就是说明已经知道这个方法提供的功能满足要求,不需要进行扩展,并且不允许任何从此类继承的类来覆写这个方法。但是
仍然可以继承这个方法,也就是说可以直接引用。第二就是允许编译器将所有对此方法的调用转化为inline(行内)调用的机制,他会在调用final方法时,直接将方法的主体
插入到调用处,而不是进行例行的方法调用,例如:保存断电,压栈等,这样可能会使程序的性能有所提高。然而当方法主体十分庞大时候,调用主体代码便会迅速膨胀,反而会影响效率。
(3)final类
当final用于类时候,就要自习考虑,因为一个final类是无法被任何类继承的。也就意味着此类在一个继承树中是一个叶子类。并且此类的设计已经被认为是十分完美的。不需要修改或者扩展。对于final类中的成员,可以是final或者不是,而对于方法,由于所属类为final的关系,自然也就成了final类型。
2.finally
finally关键字是对java异常处理模式的最佳补充。finally结构使代码总被执行,而不管有没有异常的发生,使用finally可以维护对象的额内部状态,并可以清理非内存资源
3.finalize
根绝java语言规范,jvm保证调用finalize函数之前,这个对象是不可达的,但jvm不能保证这个函数一定会被调用。另外规范还保证finalize函数最多运行一次。通常,finalize用于一些不容易的控制,并且非常重要的资源释放。例如一些io的操作,数据的连接,。这些资源的释放对整个应用程序非常关键,在这种情况下,程序猿应该以通过程序本身管理这些资源为主,以finalize函数释放资源方式为辅,形成一种双保险的管理机制,而不应该仅仅靠finalize来释放资源。。
- 浅析java中final,finally,finalize
- JAVA中final、finally、finalize
- Java中final、finally、finalize
- JAVA中final、finally、finalize
- Java中 final finally finalize
- 浅析final finally finalize
- java final,finally,finalize
- 【Java】final, finally, finalize()
- Java中final、finally 和 finalize
- Java中final、finally、finalize的区别
- Java中final、finally、finalize的区别
- java中final,finally,finalize区别
- java中final,finally,finalize的区别
- Java中final、finally、finalize的区别
- Java中final、finally、finalize的区别
- Java中final、finally、finalize的区别
- Java中final、finally、finalize的区别
- Java中final、finally、finalize的区别
- 回文串---manacher算法
- 求两个有序数组的中位数或者第k小元素
- OpenGL - VS 配置 OpenGL - 一
- java读取properties文件的几种方法
- POJ 2676/2918——数独DFS
- 浅析java中final,finally,finalize
- CUICatalog: Invalid asset name supplied: (null)
- 大数据架构师基础:hadoop家族,Cloudera产品系列等各种技术
- C++ 类的成员函数定义在.h中为什么会产生函数重定义错误?
- linux编译azkaban
- CyclisBarrier_仿真_demo
- Java多线程之信号量Semaphore
- Swift之从xls文件读取数据
- CDH4安装实践HDFS、HBase、Zookeeper、Hive、Oozie、Sqoop