final
final关键字通常用来定义不想让它‘发生改变‘的部分。可以用final修饰的有数据、方法和类。
final数据
一个永不改变的编译时常量(既是static又是final),或者是一个在运行时被初始化了值,然后你不希望他改变。当final修饰基本数据类型时,没有太多的歧义,但是当final修饰对象引用时,其含义会有一点冷人迷惑。final使引用恒定不变,一旦引用被初始化指向一个对象后,就无法再把它改为指向另外一个对象了。然而对象自身却是可以被修改的。
java允许生产空白final ,所谓空白final是指被声明为final但是又未给定初始值。无论什么情况,编译器都要确保空白final在使用前必须被初始化,所以必须要在构造器中对空白final进行初始化。下面上代码。
import java.util.Random;
public class Final {
private static Random rand = new Random(30);
private static final int var = rand.nextInt(15);
//运行时被初始化值
private final int var2 = rand.nextInt(18);
private final int var3;//空白final 必须在构造器内赋值
public Final() {
// TODO Auto-generated constructor stub
var3 = 9;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Final f = new Final();
Final f2 =new Final();
System.out.println(f);
System.out.println(f2);
}
public String toString() {
return "var的值:" +var + ";var2的值:--" + var2;
}
}
输出结果
var的值:11;var2的值:--6
var的值:11;var2的值:--11
final方法
使用final方法的原因主要是把方法锁定,以防任何继承类修改它的含义,确保继承中使方法行为保持不变,并不会被覆盖
。类中的private方法都隐式的指定为final的。
final 类
final类不可被继承,因为final类禁止继承,所以final类中所有的方法都隐式指定为final的,无法覆盖。
finally
Finally通常和try catch搭配使用,保证不管有没有发生异常,资源都能够被释放(释放连接、关闭IO流)。
finalize
Finalize是object类中的一个方法,子类可以重写finalize()方法实现对资源的回收。垃圾回收只负责回收内存,并不负责资源的回收,资源回收要由程序员完成,Java虚拟机在垃圾回收之前会先调用垃圾对象的finalize方法用于使对象释放资源(如关闭连接、关闭文件),之后才进行垃圾回收,这个方法一般不会显示的调用,在垃圾回收时垃圾回收器会主动调用。
参考链接:
https://blog.youkuaiyun.com/beixiaozhang/article/details/52955862