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方法

            final方法不能被重写

 

三、final所修饰的类

            final所修饰的类是不能被继承,不能有子类

 

四、final所修饰的变量

           final所修饰的变量,是不可修改的,是常量。

           

            常量:

                      *      字面值常量:1,2,3

                      *      自定义常量:被final所修饰的成员变量,一旦初始化则不可改变

                     注意:自定义常量必须初始化,可以选择显示初始化或者构造初始化

阅读更多

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