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;   //有参构造方法
   }