final, finally, finalize 的区别

(24) 2024-04-30 08:01:01

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.csdn.net/beixiaozhang/article/details/52955862

THE END

发表回复