final,finally,finalize
fianl修饰符:
修饰变量
成员变量:通过初始化赋值或者通过静态代码块赋值
局部变量:当初始化没有给final赋值可通过后面代码对final变量进行赋值
修饰基本类型变量和引用变量区别:
final修饰基本类型变量时,基本类型的变量值不能被改变。final修饰引用变量时,由于引用变量存储的时对象的地址,该地址不可改变,但是 对象可以改变
宏变量:final一个重要的用途就是宏变量。
前置条件:
1.使用final修饰
2.指定了初始值
3.该初始值可以在编译时就被确定下来。
编译器会把程序中所有用到该变量的地方直接替换成该变量的值
修饰方法
如果由于某些原因,不希望子类重写父类的某个方法,则可以使用 final修饰
修饰的方法不可被重写。如果子类试图重写会发生编译异常。
修饰类
子类继承父类可以访问内部数据。并通过重写父类方法实现细节 ,这可能导致一些不安全的因素。为了保证某个类不被继承,则可以通过final修饰符修饰。
final修饰的类不可有子类。例如java.lang.Math就是一个final类,不可以有子类。
finally修饰符:
有些时候,程序在try块里打开了一些物理资源(例如:数据库连接,网络连接和磁盘文件等),这些物理资源都必须显示回收。就可以使用finally进行回收
不管try块中的代码块是否出现异常,也不管哪个catch块会被执行,甚至在try块或catch块中执行了return语句,finally总会被执行
finalize
垃圾回收机制用到finalize。当程序创建对象、数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存中,当这块内存不再被任何引用变量引用时,这块内存就会变成垃圾,等待垃圾回收机制进行回收。
finalize 在垃圾回收之前进行资源清理。
如果程序中某个对象不再会有任何引用变量引用它,它就进入了 可恢复状态,这时调用垃圾回收机制回收该对象内存,在回收对象之前调用finalize()方法进行资源清理,如果对象被再次引用则进入可达状态,如果没有被其他引用变量引用则进入不可达状态。