• final,finally,finalize


    final:

    final修饰的类叫最终类,该类不能被继承。

    final修饰的方法不能被重写。

    final修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

    finally:

    finally 则是 Java 保证重点代码一定要被执行的一种机制。通常的用法都是在 finally 里进行一些资源的关闭,回收。比如 IO 流的关闭等等。

    finally 是用于异常处理的场面,无论是否有异常抛出,都会执行。

    有在try块中执行不到finally的情况吗?

    肯定是有,在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。

    try和finally中都有return语句,执行哪一个return?

    try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 try 中的 return 语句先执行,finally 语句后执行,但try中的 return 并不是让函数马上返回结果,而是 return 语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行 finally 语句后才真正开始返回。但此时会出现两种情况:
    ① 如果finally中也有return,则会直接返回finally中的return结果,并终止程序,函数栈中的return不会被完成
    ② 如果finally中没有return,则在执行完finally中的代码之后,会将函数栈中保存的try return的内容返回并终止程序

    注意:

    1、不管有没有出现异常,finally块中代码都会执行
    2、当try和catch中有return时,finally仍然会执行
    3、finally是在try中return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的
    4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值

    finalize:

    finalize是Object的方法,所有类都继承了该方法。 当一个对象满足垃圾回收的条件,并且被回收的时候,其finalize()方法就会被调用

    finalize方法是Object提供的的实例方法,使用规则如下:

    1)当对象不再被任何对象引用时,GC会调用该对象的finalize()方法
    2)finalize()是Object的方法,子类可以覆盖这个方法来做一些系统资源的释放或者数据的清理
    3)可以在finalize()让这个对象再次被引用,避免被GC回收;但是最常用的目的还是做cleanup
    4)Java不保证这个finalize()一定被执行;但是保证调用finalize的线程没有持有任何user-visible同步锁。
    5)在finalize里面抛出的异常会被忽略,同时方法终止。
    6)当finalize被调用之后,JVM会再一次检测这个对象是否能被存活的线程访问得到,如果不是,则清除该对象。也就是finalize只能被调用一次;也就是说,覆盖了finalize方法的对象需要经过两个GC周期才能被清除。

    参考 https://blog.csdn.net/mingc0758/article/details/81351009

  • 相关阅读:
    MySQL5.7初始密码查看及重置
    ps top kill
    Linux基础知识[2]【延迟及定时机制】
    大数加减运算
    字符串分隔
    打印NxN的矩阵
    交叉排序
    去除重复字符并排序
    大数求差——(华为实习招聘机试题)
    图解TCP-IP协议
  • 原文地址:https://www.cnblogs.com/lhh666/p/11546353.html
Copyright © 2020-2023  润新知