1. 程式人生 > >【JavaSE】final關鍵字

【JavaSE】final關鍵字

final關鍵字-終結器(表示有最終的,不可修改的含義)

1.final修飾類(String類以及8大基本資料型別包裝類)

    當一個類被final關鍵字修飾,表示該類不能擁有子類(該類不允許被繼承)

    一旦一個類被final修飾,該類的所有方法都會預設加上final。(成員變數(屬性)不會加final)

final class Person{}
class Student extends Person{}  //繼承一個被final修飾的類
public class test{
    public static void main(String[] args){
        new Student();
    }
}

2.final修飾方法

當一個方法被final修飾,明確表明該方法不能被覆寫

當一個方法被private修飾後,相當於加了final關鍵字

當一個類中的所有方法都被final修飾後,這個類還是可以被繼承的

class Person{
    public final void fun(){}
}
class Student extends Person{
    public void fun(){}  //覆寫父類的方法
}
public class test{
    public static void main(String[] args){
        new Student();
    }
}

3.final修飾屬性-常量

a.final修飾普通資料型別的成員變數(最主要的用途)

被final修飾的成員變數必須在宣告時初始化(構造快或構造方法中初始化),並且初始化後值無法被修改。

class Person{
    public final int a = 5;   //宣告的時候初始化
    // public Person(){ 
    //     a = 5;             //構造方法中初始化
    // }
    // {
    //     a = 5;             //構造快中初始化
    // }
}
public class test{
    public static void main(String[] args){
        System.out.println(new Person().a);
    }
}

注意:在主方法中不能用static修飾變數

    final 變數-常量(值不能改變,每個物件都有自己的final變數,在物件產生時初始化)

    static final - 全域性常量(所有物件共享此變數,並且在類載入時初始化,效率較高,通過類名呼叫)(宣告時或者靜態塊初始化)(推薦)

class Person{
    public final int a = 5;
    public staic final int b = 10;
}

b.final修飾引用資料型別的變數(值不能改變)

被final修飾的變數,值不能變,型別也不能改變

資料型別的轉換:

class Person{
    byte b1=2, b2=2, b5, b8;
    final byte b3=4, b4=5, b7=8;
    public void fun(){
        //語句1
        b5 = b1+b2;   //b5是byte型,b1和b2會轉為int型
        //語句2
        b8 = b3+b4;   //正確
        //語句3
        b3 = b1+b5;   //b3為byte型,值不能被改變
        //語句4
        b5 = b3+b8;   //b5為byte型,b8會變為int型(必須強轉)
    }
}