final关键字代表最终,不可改变。
常见有四种用法:
①.用来修饰一个类
②.用来修饰一个方法
③.用来修饰一个局部变量
④.用来修饰一个成员变量
1.修饰类
格式:
public final class 类名称{
//.....
}
含义:当前这个类不能有任何的子类,如果一个类去继承用final修饰的类会报错。(太监类)
注意:一个类如果是final,因为没有子类,所以所有的成员方法都无法进行覆盖重写。
2.修饰方法
格式:
public final 返回值类型 方法名称()
{
//...方法体
}
含义:被final修饰的方法称为最终方法,不能被覆盖重写
注意:对于类和方法来说,final和abstract不能同时使用,因为抽象类是要被覆盖重写,而final代表最终不能被重写。
3.修饰局部变量
格式: final 变量类型 变量名称 = 值;
含义:一旦使用final用来修饰局部变量,那么这个局部变量就不能进行改变,一次赋值,永久不变。
//第一次赋值可以定义变量的时候赋值“final int num = 10”,也可以定义完变量然后再单独给变量赋值。“final int num; num=10”
注意:
①对于基本数据类型来说,不可变说的是变量当中的数据不可改变
②对于引用数据类型来说,不可变说的是变量当中的地址值不可改变,但是地址所存的内容可以改变。
4.修饰成员变量
格式:权限修饰符 final 变量类型 变量名字 = 值;
含义:如果使用final关键字修饰,则成员变量也是一次赋值,不可改变。
注意:
①由于成员变量具有默认值,所以用了final关键字之后必须先手动赋值。 //此例子成立前提是构造方法没有对num进行赋值
例:
public final int num;//错误写法,因为成员变量定义不赋值时系统会给默认值,例如int类型默认值为0,而赋予默认值后
因为用关键字final修饰所以就不可改变,这样无意义,所以这样定义会直接报错。
public final int num =10;//正确写法
②对于final的成员变量,要么使用直接赋值,要么所有的构造方法中对其赋值。
public final int num; //此时初始化并未对num进行赋值,但是构造方法对其赋予了初值,所以正确。
public 类名(){
num = 10; //无参构造方法
}
public 类名(参数列表)
{
this.num = 10; //有参构造方法
}