final关键字

final关键字:通常是指无法改变的。

final可能使用到的三种情况:数据、方法和类。

一、final数据

  • 一个永远不改变的编译时常量
  • 一个在运行是被初始化的值,而且你不希望对他做出任何改变。

对于编期常量这种情况,编译器可以将该常量值带入任何可能用到它的计算式中,也就是说,在编译时执行算式,这样一来就减轻了运行时的负担。在Java中,这类常量必须是基本数据类型,并且以关键字final表示。对该常量进行定义的时候必须赋值。

当final修饰的是对象的引用时,final会使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它再指向另一个对象,然而对象其自身却是可以被修改的,Java并未提供使任何对象恒定不变的途径。 

一个既是static又是final的域只占据一段不能改变的存储空间。

class Value{
	int i;
	public Value(int i) {
		this.i = i;//1
	}
}
public class FianlData {
	private static Random  random = new Random(47);
	private String id;
	public FianlData(String id) {
		this.id = id;//为类中的id赋值
	}
	private final int valueOne = 9;
	private static final int VALUE_TWO = 99;
	public static final int VALUE_THREE = 39;
	private final int i4 = random.nextInt(20);
	static final int INT_5 = random.nextInt(20);
	private Value v1 = new Value(11);
	private final Value v2 = new Value(22);
	private static final Value VAL_3 = new Value(33);//2
	private final int[] a = {1,2,3,4,5,6};
	public String toString() {
		return id+": "+"i4 = "+i4+", INT_5 = "+INT_5;	
	}
	public static void main(String[] args) {
		FianlData fd1 = new FianlData("fd1");//
		fd1.v2.i++;
		fd1.v1 = new Value(9);
		for (int i = 0; i < fd1.a.length; i++) {
			fd1.a[i]++;
		}
		System.out.println(fd1);
		System.out.println("............................................................");
		FianlData fd2 = new FianlData("fd2");
		System.out.println(fd1);
		System.out.println(fd2);
	}

}

fd1: i4 = 15, INT_5 = 18
............................................................
fd1: i4 = 15, INT_5 = 18
fd2: i4 = 13, INT_5 = 18

二、final方法

阅读更多
上一篇向上转型于与向下转型理解
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭