java中的final关键字:
final数据:声明一个在运行期间不改变的常量;
一个既是static又是final的域占据着一块永不改变的区域;
对应基本类型,final使数值恒定不变,对应对象引用,final使其引用恒定不变;
也就是说只要声明了final数据类型,那么在程序中就不能改变final的值,如:
如果声明为static + final的话,将是占据了一块不能改变的存储空间;
空白的final:在类中的空白区域就可以做到根据对象而有所不同;但是条件是,必须在每个构造函数中对其进行赋值,这就是final域在使用前总是被初始化的原因所在。
final参数:final参数就像C++中的const参数一样,意味着无法在方法中更改参数引用所指的对象如:
final方法:
final方法主要是为了把方法锁定,禁止继承的类来修改其方法的含义;同时还可以提高效率,也就是将方法指明为final,就是同意编译器对该方法的所以调用都转为内嵌调用;并且类中的所有private方法都会隐式的转为final;
final类:
当某个类被整体定义为final时,就表明了你不打算继承该类,而且也不允许别人这样做,也就是说,你设计的类永不需要做任何变动,也就没必要有子类。
final数据:声明一个在运行期间不改变的常量;
一个既是static又是final的域占据着一块永不改变的区域;
对应基本类型,final使数值恒定不变,对应对象引用,final使其引用恒定不变;
也就是说只要声明了final数据类型,那么在程序中就不能改变final的值,如:
public class Test{
private final int one=90;
private final String str=new String("shockerjue");
public Test(){ //.........// };
public void change(String h){
one=12; //error ,cann't change one,becuase it is final type //
str=h; //error, cann't change str,because it is final type//
}
}
如果声明为static + final的话,将是占据了一块不能改变的存储空间;
空白的final:在类中的空白区域就可以做到根据对象而有所不同;但是条件是,必须在每个构造函数中对其进行赋值,这就是final域在使用前总是被初始化的原因所在。
final参数:final参数就像C++中的const参数一样,意味着无法在方法中更改参数引用所指的对象如:
public class Test{
private final int one;
Test(){
one=12;//OK//
}
public change(final int i){
one=90;//error//
i++;//error//
}
public tef(int i){
i++;//OK//
}
}
final方法:
final方法主要是为了把方法锁定,禁止继承的类来修改其方法的含义;同时还可以提高效率,也就是将方法指明为final,就是同意编译器对该方法的所以调用都转为内嵌调用;并且类中的所有private方法都会隐式的转为final;
final类:
当某个类被整体定义为final时,就表明了你不打算继承该类,而且也不允许别人这样做,也就是说,你设计的类永不需要做任何变动,也就没必要有子类。