根据程序上下文环境,Java关键字 final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法 和变量
二、final用法
1、在class上加入final,表示此class不可以被继承,没有子类,final类中的方法默认是final的,常用于专用的工具类,或者业务实现类,以防止改变原来的实现。
public final class user{
}
2、在方法前加入final,表示此方法不能被子类的方法覆盖,但可以被继承,常用于专用的业务实现方法,不希望在其它用户继承此class的时候覆盖此方法的实现。
public class user{
private String userName;
public final String getUserName(){
return this.userName;
}
}
3、在变量(常量)前加上final,表示此变量只能初始化一次,后续不可以被修改,对于基础数据类型来说只能赋值一次,
对于对象来说,只能初始化一次,但是对于对象中的可变属性来说还是可以修改的。
final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,final空白在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据 成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。
public class user{
public static final String SEX = "男";//静态变量
private final String userName = "pplive";//实例变量
private final List<String> infos = new ArrayList<String>();
private final int age;//可以先定义而不赋值,在构造方法中赋值
public user(){
this.age = 10;//在构造方法中赋值
}
public user(int iAge){
this.age = iAge;//在构造方法中赋值
}
public final String getUserInfo(){
final String sex = "女";//局部变量
return this.userName + "##" + sex;
}
}
4、final不能用于修饰构造方法。
5、父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
6、final参数 :当方法参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
public void test(final String userName){
//userName是final类型的,值不允许改变的.
System.out.print(userName);
}
7 、static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
三、其它好处:
1、在JAVA内存模型中,final域能确保对象的初始化过程的安全性,从而可以不受限制的访问不可变对象,并在共享这个对象时无须同步。
2、在代码模块中,如果在只初始化一次对象的时候,在变量对象前加上final关键字,
可以让大家知道此对象在初始化后就不会再修改,可以避免此对象在后续代码编写中再进行赋值,这也是一种良好的编程习惯。