• final, finally, finalize 的区别


    final:

    在java中,final可以用来修饰类,方法和变量(成员变量或局部变量)

    1、final类中所有的成员方法都会隐式的定义为final方法。

    2、若父类中final方法的访问权限为private,将导致子类中不能直接继承该方法,因此,此时可以在子类中定义相同方法名的函数,此时不会与重写final的矛盾,而是在子类中重新地定义了新方法。

    3、final成员变量表示常量,只能被赋值一次,赋值后其值不再改变。类似于C++中的const。

    4、final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式

    一种是在变量声明的时候初始化;

    第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值

    finally:

    1、只有与finally对应的try语句块得到执行的情况下,finally语句块才会执行。

    2、在 try 语句块中执行了 System.exit (0) 语句,终止了 Java 虚拟机的运行,不会执行finally语句块

    3、当一个线程在执行 try 语句块或者 catch 语句块时被打断(interrupted)、被终止(killed)、突然死机或者断电,都不会执行finally语句块

    4、finally块的语句在try或catch中的return语句执行之后返回之前执行,finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally里也有return语句则覆盖try或catch中的return语句直接返回。

    finalize :

    finalize()是在java.lang.Object里定义的,这个方法在gc启动,该对象被回收的时候被调用,一般是不需要程序员去实现finalize的;

    特殊情况下,需要程序员实现finalize,当对象被回收的时候释放一些资源,比如:一个socket链接,在对象初始化时创建,整个生命周期内有效,那么就需要实现finalize,关闭这个链接。

    使用finalize还需要注意一个事,调用super.finalize();

    一个对象的finalize()方法只会被调用一次,而且finalize()被调用不意味着gc会立即回收该对象,所以有可能调用finalize()后,该对象又不需要被回收了,然后到了真正要被回收的时候,因为前面调用过一次,所以不会调用finalize(),产生问题。 所以,推荐不要使用finalize()方法

  • 相关阅读:
    web自动化测试---自动化脚本设置百度搜索每页显示条数
    web自动化测试---测试中其他一些常用操作
    web自动化测试---css方式定位页面元素
    web自动化测试---xpath方式定位页面元素
    linux系统 之 curl命令
    http协议
    php编程 之 php基础二
    shell编程 之 ssh远程连接
    php编程 之 php进阶练习
    php编程 之 php基础一
  • 原文地址:https://www.cnblogs.com/goodbye-lazy/p/11220825.html
Copyright © 2020-2023  润新知