3.谈谈 final、finally、finalize的区别

题目:谈谈 final、finally、finalize的区别?
解析:如题,如果要知道他们之间的区别,那么我们必须要知道它们每一个是什么意思。

1 .  final

final 可以用于控制成员、方法,或者是一个类是否可以被覆写或继承等功能,这些特点 final 在 Java 中拥有一个不可或缺的地位,也是学习 Java时必须要知道和掌握的关键字之一。

 (1)final 成员

当在类中定义变量时,若在其前面加上 final 关键字,那就是说,这个变量一旦被初始化,便是不可改变的。

  例如:final  String   str = "abc";
       final int  a = 8;

这里的不可改变的意思对基本数据类型(如a的值)来说是其值不可变,而对于对象变量(如引用 str )来说是引用不可变。其初始化可以在两个地方,一是其定义处,二是在构造函数中,二者只能选其一。

还有一种用法是定义方法中的参数为 final 关键字。对于基本数据类型的变量,这样做并没有什么实际的意义,因为基本类型的变量在调用方法时是传值的,也就是说,我可以在方法中更改这个参数变量而不会影响到调用语句,然而对于对象变量,却显得很实用,因为对象变量在传递时是传递其引用的,这样,我在方法中对对象变量的修改也会影响到调用语句中的对象变量。当你在方法中不需要改变作为参数的对象变量时,明确使用 final 进行声明,会防止你无意的修改而影响到调用方法。

  (2)final 方法

将方法声明为 final 有两个原因。第一就是说明应知道这个方法提供的功能满足要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是仍然可以继承这个方法,也就是说,可以直接使用。第二就是允许编译器将所有对此方法的调用转化为 inline(行内)调用机制,例如,保存断点、压栈等(?),这样可能会使程序的效率有所有提高。然而,当方法的主题非常庞大的时候,或者在多处调用此方法时,调用主体代码便会迅速膨胀,可能反而影响效率,所以要慎用 final 进行方法定义。

  (3)final 类

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

  2. finally

finally 关键字是对 Java 异常处理模型的最佳补充。finally 结构使代码总会执行,而不管有无异常发生。使用 finally 可以维护对象内部的状态,并可以清理非内存资源。如果没有 finally ,我们的代码就会很费解。

3. finalize

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

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

答案

  1. final 修饰符 (关键字)

如果一个类被声明为 final , 意味着它不能在派生处新的子类,不能作为父类被继承。因此,一个类既不能被声明为 abstract ,又被声明为 final 。将变量或者方法声明为 final,可以保证它们在使用中不被改变。其初始化可以在两个地方:一个是其定义处,也就是说,在 final 变量定义时直接给其赋值;而是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造构造函数中给另外的值,而在以后的引用中只能读取,不可修改。被声明为 final 的方法也同样只能使用,不能重写(override)。

  2. finally

在异常处理时提供 finally 块来执行任何清楚操作。如果跑出一个异常,那么相匹配的 catch 自居就会执行,然后控制就会进入 finally 块 (如果有的话)。

 3.finalize

finalize 是方法名。 Java技术允许使用 finalize() 方法在垃圾收集器将对象从内存清除出去前做必要的清理工作。这个方法有垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object 类中定义的,因此,所有的类都继承类它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。 finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,531评论 18 399
  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,137评论 1 44
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,048评论 0 62
  • 所有知识点已整理成app app下载地址 J2EE 部分: 1.Switch能否用string做参数? 在 Jav...
    侯蛋蛋_阅读 2,398评论 1 4
  • 文丨膜小欣 图丨花瓣 1. >>>不主动真的会死<<< “反正每次你都说对不起,然后呢?还要我教你说娶我?主动一...
    膜小欣阅读 495评论 0 0