最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java final 修飾符知識點(diǎn)總結(jié)(必看篇)

 更新時間:2016年09月21日 06:56:16   投稿:jingxian  
下面小編就為大家?guī)硪黄狫ava final 修飾符知識點(diǎn)總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

final從字面上理解含義為“最后的,最終的”。在Java中也同樣表示出此種含義。

final可以用來修飾變量(包括類屬性、對象屬性、局部變量和形參)、方法(包括類方法和對象方法)和類。

1. final修飾類:

final修飾類即表示此類已經(jīng)是“最后的、最終的”含義。因此,用final修飾的類不能被繼承,即不能擁有自己的子類。

如果視圖對一個已經(jīng)用final修飾的類進(jìn)行繼承,在編譯期間或發(fā)生錯誤。

2. final修飾方法:

final修飾的方法表示此方法已經(jīng)是“最后的、最終的”含義,亦即此方法不能被重寫(可以重載多個final修飾的方法)。

此處需要注意的一點(diǎn)是:因?yàn)橹貙懙那疤崾亲宇惪梢詮母割愔欣^承此方法,如果父類中final修飾的方法同時訪問控制權(quán)限為private,

將會導(dǎo)致子類中不能直接繼承到此方法,因此,此時可以在子類中定義相同的方法名和參數(shù),此時不再產(chǎn)生重寫與final的矛盾,而是

在子類中重新定義了新的方法。

public class B extends A {

  public static void main(String[] args) {

  }

  public void getName() {
    
  }
}

class A {

  /**
   * 因?yàn)閜rivate修飾,子類中不能繼承到此方法,因此,子類中的getName方法是重新定義的、
   * 屬于子類本身的方法,編譯正常
   */
  private final void getName() {
    
  }

  /* 因?yàn)閜blic修飾,子類可以繼承到此方法,導(dǎo)致重寫了父類的final方法,編譯出錯
  public final void getName() {
  
  }
  */
}

3. final 修飾變量:

final修飾的變量表示此變量是“最后的、最終的”含義。一旦定義了final變量并在首次為其顯示初始化后,final修飾的變量值不可被改變。

這里需要注意以下幾個問題:

1. final修飾的變量,無論是類屬性、對象屬性、形參還是局部變量,這些變量都是需要進(jìn)行顯示初始化(即為其顯示指定初始值)。

對于final修飾的形參,由于是實(shí)參傳遞過來的,很好理解。

對于final修飾的局部變量,與未用final修飾的變量一樣,都是需要顯示初始化。即局部變量都是需要顯示初始化的。

對于一般的類屬性和對象屬性,由類和對象的初始化過程中可以看出,首先都進(jìn)行了默認(rèn)初始化。然后對有顯示賦值的變量才再進(jìn)行顯示初始化。

但對final修飾的類屬性和對象屬性而言,如果不顯示初始化,其默認(rèn)將是進(jìn)行默認(rèn)初始化后的值,這與final本身出發(fā)點(diǎn)矛盾,因此,Java語法規(guī)定:

final修飾的類屬性和變量屬性必須要進(jìn)行顯示初始化賦值。

另外,無論對于基本數(shù)據(jù)類型還是引用數(shù)據(jù)類型,final修飾的變量都是首次顯示初始化后值都不能修改。對于基本數(shù)據(jù)類型,很好理解。對于引用

數(shù)據(jù)類型,引用變量指向的是實(shí)際的對象,但其存儲的是所指向?qū)ο蟮牡刂?,因此,其值不能修改并不意味著其所指向的對象不能修改?/p>

4. final修飾變量后導(dǎo)致的“宏替換”/"宏變量"問題

Java 中宏變量/宏替換指的是在java代碼中在編譯期某些變量能夠直接被其本身的值所替換,編譯到.class文件中。因此,編譯后的.class文件中已經(jīng)不存在此變了。

在String類型的變量中,有時候經(jīng)常遇到如下情況:

 

public class Test {

  public static void main(String[] args) {

    String country = "China";
    String name = "qqyumidi";

    String userInfo = country + name; //編譯后此處依然是country和name變量
    String user = "China" + "qqyumidi"; //編譯后此處直接變成Chinaqqyumidi

  }
}

 在上述代碼中的第9行,編譯后的變量結(jié)果直接為Chinaqqyumidi。而第8行代碼中,由于country和name都是普通的變量,編譯器無法在編譯時直接確定userInfo的值,因此

此處編譯后結(jié)果不直接是Chinaqqyumidi。

但是,如果希望第8行中的代碼在編譯期直接就能表示為Chinaqqyumidi,就需要用到final修飾符對country和name變量進(jìn)行修飾。

原因:final修飾符修飾的變量在由于其本身的特性,在編譯期就能直接確定其值,且此值不可變。在編譯過程中,可以直接將其變量直接轉(zhuǎn)換成其值本身去表示。

public class Test {

  public static void main(String[] args) {

    final String country = "China";
    final String name = "qqyumidi";

    String userInfo = country + name; //編譯后此處直接是Chianqqyumidi

  }
}

以上就是小編為大家?guī)淼腏ava final 修飾符知識點(diǎn)總結(jié)(必看篇)的全部內(nèi)容了,希望對大家有所幫助,多多支持腳本之家~

相關(guān)文章

  • SpringBoot集成SQL?Server的詳細(xì)指南

    SpringBoot集成SQL?Server的詳細(xì)指南

    SQL?Server是由Microsoft開發(fā)和推廣的以客戶/服務(wù)器(c/s)模式訪問、使用Transact-SQL語言的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS),本文給大家介紹了Spring?Boot集成SQL?Server的詳細(xì)指南,需要的朋友可以參考下
    2024-11-11
  • SpringBoot 如何使用RestTemplate發(fā)送Post請求

    SpringBoot 如何使用RestTemplate發(fā)送Post請求

    這篇文章主要介紹了SpringBoot 如何使用RestTemplate發(fā)送Post請求的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JAVA序列化和反序列化的底層實(shí)現(xiàn)原理解析

    JAVA序列化和反序列化的底層實(shí)現(xiàn)原理解析

    這篇文章主要介紹了JAVA序列化和反序列化的底層實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java 判斷IP地址的合法性實(shí)例詳解

    Java 判斷IP地址的合法性實(shí)例詳解

    這篇文章主要介紹了Java 判斷IP地址的合法性實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Spring AOP事務(wù)管理的示例詳解

    Spring AOP事務(wù)管理的示例詳解

    這篇文章將通過轉(zhuǎn)賬案例為大家詳細(xì)介紹一下Spring AOP是如何進(jìn)行事務(wù)管理的,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-06-06
  • 簡單了解java volatile

    簡單了解java volatile

    這篇文章主要介紹了了解java volatile,volatile是Java提供的一種輕量級的同步機(jī)制,在并發(fā)編程中,它也扮演著比較重要的角色。下面我們來一起學(xué)習(xí)一下吧
    2019-05-05
  • 詳解Java Slipped Conditions

    詳解Java Slipped Conditions

    這篇文章主要介紹了Java Slipped Conditions的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • 公共POI導(dǎo)出Excel方法詳解

    公共POI導(dǎo)出Excel方法詳解

    這篇文章主要介紹了公共POI導(dǎo)出Excel方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • SpringCloud之動態(tài)刷新、重試、服務(wù)化的實(shí)現(xiàn)

    SpringCloud之動態(tài)刷新、重試、服務(wù)化的實(shí)現(xiàn)

    這篇文章主要介紹了SpringCloud 之動態(tài)刷新、重試、服務(wù)化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java?遠(yuǎn)程調(diào)用失敗重試的操作方法

    Java?遠(yuǎn)程調(diào)用失敗重試的操作方法

    這篇文章主要介紹了Java?遠(yuǎn)程調(diào)用失敗重試的操作方法,今天給大家介紹了一下?Spring??的?@Retryable?注解使用,并通過幾個 demo 來帶大家編寫了自己重試攔截器以及回滾方法,需要的朋友可以參考下
    2022-09-09

最新評論

汾西县| 普格县| 剑阁县| 金坛市| 柳江县| 岚皋县| 隆化县| 东乡族自治县| 海南省| 瓮安县| 碌曲县| 德格县| 石泉县| 天长市| 清河县| 乐业县| 增城市| 虹口区| 永靖县| 绥阳县| 泰兴市| 景谷| 宜州市| 龙南县| 青海省| 广元市| 玛沁县| 东山县| 海南省| 都江堰市| 中牟县| 望谟县| 喀喇沁旗| 武陟县| 忻城县| 灵丘县| 遂川县| 仙桃市| 光山县| 南安市| 拉孜县|