在java语言中,final关键字指的是“它是无法改变的”,使用到final关键字有三种情况:数据、方法和类。
一个既是static又是final的字段只占据一段不能改变的存储空间。
用final关键字定义的数据:
1)如果是基本类型的数据,那么final使数值恒定不变;(八种基本类型:boolean,char,byte,short,int,long,float,double)
2)如果是对象的引用,那么final使对象的引用恒定不变,也就是说一旦指向了某个对象的引用,就无法再把它指向其它对象了;但是对象本身是可以修改的。
class Foo {
private String fooName;
public Foo() {
// TODO Auto-generated constructor stub
}
public String getFooName() {
return fooName;
}
public void setFooName(String fooName) {
this.fooName = fooName;
}
}
public class TestFoo
{
private final Foo foo;
public TestFoo() {
foo = new Foo();
//默认设置fooname
foo.setFooName("default Foo Name");
}
public Foo getFoo() {
return foo;
}
//error,定义为final对象不能被修改
/*
public void setFoo(Foo f) {
this.foo = f;
}*/
public static void main(String[] args) {
TestFoo tf = new TestFoo();
Foo f = tf.getFoo();
System.out.println(f.getFooName());//输出default Foo Name
f.setFooName("test1");
System.out.println(f.getFooName());//输出test1
}
}
用final关键字修饰方法:
1)把方法锁定,以防任何继承类修改(private声明的方法隐式的指定为final,private修饰的方法是无法继承的,可以在private方法上加final进行修饰,但没有任何额外的意义,反而是画蛇添足);
2)提高效率。如果将一个方法指定为final,那么编译器将针对该方法的所有调用转为内嵌调用。
用final关键字修饰类:
当将某个类整体定义为final时,就表明了这个类不会被其它类继承,而且也不允许别人这样做。