谈谈final、finallly、finalize的区别 下载本文

? Final可以让你控制你的成员、方法,或者使一个类是否可被覆写或继承等功能,这些特点使final在java中拥有了一个不可或缺的地位,也是学习java

时必须要知道和掌握的关键字之一。 (1)final成员

当在类中定义变量时,在其前面加上final关键字,这个变量一旦被初始化便不可改变,不可改变的意思对基本类型来说是其值不可变,而对于对象来说是其引用不可再变。其初始化可以在两个地方,一是定义处,二是构造函数中。 还有一种用法是定义方法中的参数为final。对于基 本类型的变量,这样做并没有什么实际意思,因为基本类型在调用方法时是传值的,也就是说你可以在方法中更改这个参数变量而不会影响到调用语句,然而对于对象变量,却显得实用,因为对象变量在传递时是传递其引用的,这样你在方法中对对象变量的修改也会影响到调用语句中的对象变量。当你在方法中不需要改变作为参数的对象变量时。明确实用final进行声明,会防止你无意的修改而影响到调用方法。 (2)final方法

将方法声明为final有两个原因,第一是说明已经知道这个方法提供的功能已经满足要求,不需要进行

扩展,并且也不允许任何从此类继承的类来的覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接实用。第二就是允许编译器将所有对此方法的调用转化为inling(行内)调用的机制,它会调用final方法时,直接将方法主题插入到调用处,而不是进行例行的方法调用,例如保存断点,圧栈等这样可能会使程序效率有所提高。然而当方法主体非常庞大时,或在多处调用此方法时,调用主体代码便会迅速膨胀,可能反而会影响效率,所以要慎用final进行方法定义 (3)final 类

当将final用于类身上时,就需要仔细考虑,因为一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,冰儿此类的设计已被认为很完美而不需要进行修改或扩展。对于final类中的成员,可以定义为final,也可以不用final。而对于方法,由于所属类为final的关系,自然也就成了final型的。也可以明确地给fianl类中的方法加上一个final、 ,但这显然没有意思。

? Finally

Finally关键字是对java异常处理模型的最佳补充。 Finally 结构使代码总会执行,而不管有无异常的发

生。使用finlly可以维护对象内部状态,并可以清理非内存资源。如果没有finally,你的代码就会很费解。

? Finalize

根据java语言规范,jvm保证调用finalize函数之前,这个对象时不可达的,但是jvm不保证这个函数一定会被调用。另外,规范还保证finalize函数最多运行一次

通常,finalize用于一些不容易控制,并且非常重要的资源的释放,例如,一些io的操作,数据的链接。这些资源的释放对整个应用程序是非常关键的。在这种情况下,程序员应该以通过程序本身管理这些资源为主,以finalize函数释放资源方式为辅,形成一种双保险的管理机制,而不应该仅仅依靠finalize来释放资源