Java中final

談到final關(guān)鍵字,想必很多人都不陌生,在使用匿名內(nèi)部類的時(shí)候可能會(huì)經(jīng)常用到final關(guān)鍵字。另外,Java中的String類就是一個(gè)final類,那么今天我們就來了解final這個(gè)關(guān)鍵字的用法。

  • 在Java中,final關(guān)鍵字可以用來修飾類、方法和變量(包括成員變量和局部變量)。下面就從這三個(gè)方面來了解一下final關(guān)鍵字的基本用法。
  1. 修飾類
    • 當(dāng)用final修飾一個(gè)類時(shí),表明這個(gè)類不能被繼承。final類中的成員變量可以根據(jù)需要設(shè)為final,但是要注意final類中的所有成員方法都會(huì)被隱式地指定為final方法。


      示例代碼
  2. 修飾方法
  • 摘自《Java編程思想》第四版第143頁:

"使用final方法的原因有兩個(gè)。第一個(gè)原因是把方法鎖定,以防任何繼承類修改它的含義;第二個(gè)原因是效率。在早期的Java實(shí)現(xiàn)版本中,會(huì)將final方法轉(zhuǎn)為內(nèi)嵌調(diào)用。但是如果方法過于龐大,可能看不到內(nèi)嵌調(diào)用帶來的任何性能提升。在最近的Java版本中,不需要使用final方法進(jìn)行這些優(yōu)化了。"

因此,如果想明確禁止指定方法在子類中不被重寫,就將該方法設(shè)置為final(類的private方法會(huì)隱式地被指定為final方法)

  1. 修飾變量:對(duì)于修飾為final的變量,它就不能再賦值。
    • 如果是基本數(shù)據(jù)類型的變量,則其數(shù)值一旦在初始化之后便不能更改;


      示例代碼

      上面的一段代碼中,對(duì)變量i和obj的重新賦值都報(bào)錯(cuò)了。

    • 如果是引用類型的變量,則在對(duì)其初始化之后便不能在賦值,但該對(duì)象行為不被final影響,也就是對(duì)象里面
public class Year {
    private int year;
    private String name;

    public Year(int year, String name) {
        this.year = year;
        this.name = name;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Year{" +
                "year=" + year +
                ", name='" + name + '\'' +
                '}';
    }

    public static void main(String[] args) {
        final Year year=new Year(1,"2");
        System.out.println(year.toString());
        year.setYear(3);
        System.out.println(year.toString());
    }

}

輸出

Year{year=1, name='2'}
Year{year=3, name='2'}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,626評(píng)論 18 399
  • 1 enum不能用作 變量名 備注:java 5以后enum是關(guān)鍵字 2 equals(obj)和hashCode...
    落落落落大大方方閱讀 1,070評(píng)論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • final final類 final類不能被繼承,因此final類的成員方法沒有機(jī)會(huì)被覆蓋,默認(rèn)都是final的。...
    吃瓜群眾liu閱讀 387評(píng)論 0 1
  • 每天的下班時(shí)間都是失眠開始的時(shí)間,看完繪本畫幅畫,慰藉疲憊的身體和麻木的大腦。因?yàn)槲液芮宄?,除了自己,誰都不在乎你...
    Gigi熊閱讀 303評(píng)論 3 1

友情鏈接更多精彩內(nèi)容