final关键字
一,final关键字的特点
(1)final关键字表示最终的,不可变的
(2)final关键字修饰的类无法被继承
(3)final修饰的方法无法覆盖
(4)final修饰的变量无法再次赋值
(5)final可以修饰实例变量和引用
例子:
(1)
public class Test {
public final void way() { //用final修饰方法
}
public class Test1 extends Test{
public void way() { //way处出现提示,移除final
}
}
(2)
public class Test {
public static void main (String args[]) {
final int a=10;
a=200;//a有错误,出现提示移除final修饰符,无法再次更新值
System.out.println(a);
注:程序员必须为实例变量中被final修饰的变量手动赋值,final如果不赋值,其默认值为0,因为无法再次变更值。你该无法更改了。
例:
public class Test {
final int a = 0;//成员变量不赋值会报错
public static void main (String args[]) {
final int a;
//实例变量不赋值会报错
a=100;
System.out.println(a);
}
}
成员变量的实例变量中有了final会无法修改数据,实例变量的默认值为0,如果没有手动赋值,会提示赋值。因此,final修饰的变量一定要手动赋值。(在构造方法中赋值也可以,它们本质都是一样的)
二,final修饰的对象和引用
例子:
public class Test {
private int id;
public int getid() {
return id;
}
public void setid(int id) {
this.id=id;
}
public Test() {
super();
}
public Test(int id) {
super();
this.id=id;
}
public static void main (String args[]) {
Test t1=new Test(10000);
t1=new Test(50);//可以通过,指向了一个新的对象,内部传输值变更为50
System.out.println(t1.id);//50
final Test t2=new Test(100);//final修饰后
t2=new Test(500);//不行,无法更改对象引用,要求移除final
t2.id=55;//修改了内部数据100变为55
System.out.println(t2.id);//55
}
}
final修饰的引用一旦指向了某个对象以后,不能再指向其他的对象。不过所指对象的内部还是可以修改的。
指向新的对象后,旧的对象就会被垃圾回收机制清除。
final通常使用在一些固定的,不会被修改的值上面。比如:某大学学生的学生的学校,几乎都是是固定的学校名称,可以设置成final