关于final的用法和注意事项

1、首先基本定义就是,final关键字用于变量声明,只要该变量被设定,就不可以改变其变量的值。通常final定义的变量为常量。

 

final可以修饰基本数据类型的常量,也可以修饰对象的引用。数组也可以被看作一个对象来引用。一旦一个对象引用被修饰为final后,它只能恒定指向一个对象,无法将其改变以指向另一个对象。一个是static又是final的字段只占据一段不能改变的存储空间。

 

import static java.lang.System.*;
import java.util.*;
public class FinalStaticData {
	private static Random rand = new Random(); // 实例化一个Random类对象
	// 随机产生0~10之间的随机数赋予定义为final的a1
	private final int a1 = rand.nextInt(10);
	// 随机产生0~10之间的随机数赋予定义为static final的a2
	private static final int a2 = rand.nextInt(10);
	
	public static void main(String[] args) {
		FinalStaticData fdata = new FinalStaticData(); // 实例化一个对象
		// 调用定义为final的a1
		out.println("重新实例化对象调用a1的值:" + fdata.a1);
		// 调用定义为static final的a2
		out.println("重新实例化对象调用a1的值:" + fdata.a2);
		// 实例化另外一个对象
		FinalStaticData fdata2 = new FinalStaticData();
		out.println("重新实例化对象调用a1的值:" + fdata2.a1);
		out.println("重新实例化对象调用a2的值:" + fdata2.a2);
	}
}

 

例如上面的代码,最终运行结果是:

重新实例化对象调用a1的值:3

重新实例化对象调用a1的值:2

重新实例化对象调用a1的值:0

重新实例化对象调用a1的值:2

我们可以看出,定义为final的常量不是不变的,将随机数赋给a值,值还是会变,但又static 又final的a 在内存里开辟了一个值不变的空间,所以定义为static final的a 值并不变。

2、final方法

首先,定义为final的方法不能被重写。

好处:①可以防止子类修改该类的定义和实现方式

          ②定义为final的方法执行效率会比非final方法高

你可能感兴趣的:(关于final的用法和注意事项)