final、finally与finalize的区别

final

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

修饰类

当用final修饰类的时,表明该类不能被其他类所继承。final类中所有的成员方法都会隐式的定义为final方法。

修饰方法

把方法锁定,以防止继承类对其进行更改。即此方法不能被重写

修饰变量

final成员变量表示常量,只能被赋值一次,赋值后其值不再改变。

  • 当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;
  • 如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了(引用的值是一个地址,final要求值,即地址的值不发生变化),但该引用所指向的对象的内容是可以发生变化的

final修饰一个成员变量(属性),必须要显示初始化

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

finally

finally作为异常处理的一部分,它只能用在try-catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。

  • 只有与finally对应的try语句块得到执行的情况下,finally语句块才会执行。如果在执行try语句块之前已经返回或抛出异常,那么try对应的finally语句并不会执行
  • 在某些情况下,即使try语句执行了,finally语句也不一定执行:在try语句块中执行System.exit (0)语句,终止Java虚拟机的运行
  • 当一个线程在执行try语句块或者catch语句块时被打断(interrupted)或者被终止(killed),与其相对应的finally语句块可能不会执行。

finalize

finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。这个方法在gc启动,该对象被回收的时候被调用。其实gc可以回收大部分的对象,所以一般是不需要程序员去实现finalize的。

参考资料

1.final、finally与finalize的区别

posted @ 2021-03-11 02:21  chenzufeng  阅读(261)  评论(0编辑  收藏  举报