final

final 类似 c 的 const 。

1.用于字段

无论作用于基本类型还是引用类型,效果都是,不允许对字段再次赋值

java没有提供约束对象不变的机制。
final修饰变量,并不意味着变量的值要在编译期间确定。见下面代码。
class A{
	private static Random rand=new Random();
	private final int i1=rand.nextInt();//运行期间确定的final成员
}
class B{
	private final int i1;	//定义处可以不为final成员赋值
	public B(int x){	
		i1=x;		//运行期间确定的final成员
	}
}

2.用于方法

具体又分两种情况。

2.1 方法主体

同时具有两个作用——禁止子类重写与编译器的内联优化。

2.2 函数形参

若形参用 final修饰,与final作用于变量效果一致。感觉没什么实际意义。

public final void f(){}
void fun2(final A reA){
	//reA=new A(); //illeagl,reA is final
}

3.用于类

不允许其他类继承,即该类不能拥有子类。

除了用final,将构造函数设为私有也可以达到同样的效果。


你可能感兴趣的:(final)