大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java中final關(guān)鍵字的幾種用法

Java中final關(guān)鍵字的幾種用法

更新時(shí)間:2019-08-19 15:18:54 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2660次


 


  在java的關(guān)鍵字中,static和final是兩個(gè)我們必須掌握的關(guān)鍵字。不同于其他關(guān)鍵字,他們都有多種用法,而且在一定環(huán)境下使用,可以提高程序的運(yùn)行性能,優(yōu)化程序的結(jié)構(gòu)。下面大家跟隨動(dòng)力節(jié)點(diǎn)java學(xué)院小編一起來了解一下final關(guān)鍵字及其用法。


final關(guān)鍵字


  在java中,final的含義在不同的場景下有細(xì)微的差別,但總體上來說,它指的是“這是不可變的”。下面,我們來講final的四種主要用法。


1、修飾數(shù)據(jù)


在編寫程序時(shí),我們經(jīng)常需要說明一個(gè)數(shù)據(jù)是不可變的,我們成為常量。在java中,用final關(guān)鍵字修飾的變量,只能進(jìn)行一次賦值操作,并且在生存期內(nèi)不可以改變它的值。更重要的是,final會(huì)告訴編譯器,這個(gè)數(shù)據(jù)是不會(huì)修改的,那么編譯器就可能會(huì)在編譯時(shí)期就對(duì)該數(shù)據(jù)進(jìn)行替換甚至執(zhí)行計(jì)算,這樣可以對(duì)我們的程序起到一點(diǎn)優(yōu)化。不過在針對(duì)基本類型和引用類型時(shí),final關(guān)鍵字的效果存在細(xì)微差別。我們來看下面的例子:


class Value {

      int v;

      public Value(int v) {

          this.v = v;

      }

  }

  

  public class FinalTest {

      

    final int f1 = 1;

    final int f2;

    public FinalTest() {

         f2 = 2;

     }

 

     public static void main(String[] args) {

         final int value1 = 1;

         // value1 = 4;

         final double value2;

        value2 = 2.0;

        final Value value3 = new Value(1);

        value3.v = 4;

   }

 }


  上面的例子中,我們先來看一下main方法中的幾個(gè)final修飾的數(shù)據(jù),在給value1賦初始值之后,我們無法再對(duì)value1的值進(jìn)行修改,final關(guān)鍵字起到了常量的作用。從value2我們可以看到,final修飾的變量可以不在聲明時(shí)賦值,即可以先聲明,后賦值。value3時(shí)一個(gè)引用變量,這里我們可以看到final修飾引用變量時(shí),只是限定了引用變量的引用不可改變,即不能將value3再次引用另一個(gè)Value對(duì)象,但是引用的對(duì)象的值是可以改變的,從內(nèi)存模型中我們看的更加清晰:


1.jpg

  

  上圖中,final修飾的值用粗線條的邊框表示它的值是不可改變的,我們知道引用變量的值實(shí)際上是它所引用的對(duì)象的地址,也就是說該地址的值是不可改變的,從而說明了為什么引用變量不可以改變引用對(duì)象。而實(shí)際引用的對(duì)象實(shí)際上是不受final關(guān)鍵字的影響的,所以它的值是可以改變的。


  另一方面,我們看到了用final修飾成員變量時(shí)的細(xì)微差別,因?yàn)閒inal修飾的數(shù)據(jù)的值是不可改變的,所以我們必須確保在使用前就已經(jīng)對(duì)成員變量賦值了。因此對(duì)于final修飾的成員變量,我們有且只有兩個(gè)地方可以給它賦值,一個(gè)是聲明該成員時(shí)賦值,另一個(gè)是在構(gòu)造方法中賦值,在這兩個(gè)地方我們必須給它們賦初始值。


  最后我們需要注意的一點(diǎn)是,同時(shí)使用static和final修飾的成員在內(nèi)存中只占據(jù)一段不能改變的存儲(chǔ)空間。



  2、修飾方法參數(shù)


前面我們可以看到,如果變量是我們自己創(chuàng)建的,那么使用final修飾表示我們只會(huì)給它賦值一次且不會(huì)改變變量的值。那么如果變量是作為參數(shù)傳入的,我們?cè)趺幢WC它的值不會(huì)改變呢?這就用到了final的第二種用法,即在我們編寫方法時(shí),可以在參數(shù)前面添加final關(guān)鍵字,它表示在整個(gè)方法中,我們不會(huì)(實(shí)際上是不能)改變參數(shù)的值:


public class FinalTest {


    /* ... */


    public void finalFunc(final int i, final Value value) {

        // i = 5; 不能改變i的值

        // v = new Value(); 不能改變v的值

        value.v = 5; // 可以改變引用對(duì)象的值

    }

}



  3、修飾方法


第三種方式,即用final關(guān)鍵字修飾方法,它表示該方法不能被覆蓋。這種使用方式主要是從設(shè)計(jì)的角度考慮,即明確告訴其他可能會(huì)繼承該類的程序員,不希望他們?nèi)ジ采w這個(gè)方法。這種方式我們很容易理解,然而,關(guān)于private和final關(guān)鍵字還有一點(diǎn)聯(lián)系,這就是類中所有的private方法都隱式地指定為是final的,由于無法在類外使用private方法,所以也就無法覆蓋它。



  4、修飾類


了解了final關(guān)鍵字的其他用法,我們很容易可以想到使用final關(guān)鍵字修飾類的作用,那就是用final修飾的類是無法被繼承的。


  上面我們講解了final的四種用法,然而,對(duì)于第三種和第四種用法,我們卻甚少使用。這不是沒有道理的,從final的設(shè)計(jì)來講,這兩種用法甚至可以說是雞肋,因?yàn)閷?duì)于開發(fā)人員來講,如果我們寫的類被繼承的越多,就說明我們寫的類越有價(jià)值,越成功。即使是從設(shè)計(jì)的角度來講,也沒有必要將一個(gè)類設(shè)計(jì)為不可繼承的。Java標(biāo)準(zhǔn)庫就是一個(gè)很好的反例,特別是Java 1.0/1.1中Vector類被如此廣泛的運(yùn)用,如果所有的方法均未被指定為final的話,它可能會(huì)更加有用。如此有用的類,我們很容易想到去繼承和重寫他們,然而,由于final的作用,導(dǎo)致我們對(duì)Vector類的擴(kuò)展受到了一些阻礙,導(dǎo)致了Vector并沒有完全發(fā)揮它應(yīng)有的全部價(jià)值。



  總結(jié)


final關(guān)鍵字是我們經(jīng)常使用的關(guān)鍵字之一,它的用法有很多,但是并不是每一種用法都值得我們?nèi)V泛使用。它的主要用法有以下四種:


1、用來修飾數(shù)據(jù),包括成員變量和局部變量,該變量只能被賦值一次且它的值無法被改變。對(duì)于成員變量來講,我們必須在聲明時(shí)或者構(gòu)造方法中對(duì)它賦值;


2、用來修飾方法參數(shù),表示在變量的生存期中它的值不能被改變;


3、修飾方法,表示該方法無法被重寫;


4、修飾類,表示該類無法被繼承。


  上面的四種方法中,第三種和第四種方法需要謹(jǐn)慎使用,因?yàn)樵诖蠖鄶?shù)情況下,如果是僅僅為了一點(diǎn)設(shè)計(jì)上的考慮,我們并不需要使用final來修飾方法和類。



以上內(nèi)容相關(guān)免費(fèi)視頻教程下載


http://www.dabaquan.cn/xiazai/754.html


      

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 在线亚洲国产精品区 | 亚洲欧美综合乱码精品成人网 | 久草青青在线视频 | 欧美一级片网站 | 波多野结衣一区 | 久久精品国产久精国产80cm | 久久精品一区二区国产 | 日韩在线一区二区三区视频 | 国产成人亚洲综合欧美一部 | 日本强日本不卡一 | 日韩免费一级毛片欧美一级日韩片 | 最好看的毛片 | 久久精品成人免费网站 | 久久99国产综合精品 | 国产精品柳州莫菁身材四 | 日日躁夜夜躁狠狠天天 | 看一级毛片 | 四虎网站在线播放 | 99视频久久 | 国产香蕉一区二区在线网站 | 国产午夜永久福利视频在线观看 | 久艾草国产成人综合在线视频 | 亚洲精品不卡午夜精品 | 欧美色成人tv在线播放 | 久草视频免费 | 一区在线免费观看 | 日本一级毛片视频网站 | 精品国产一区二区二三区在线观看 | 国产成人精品一区二区视频 | 白蛇缘起3免费观看 | 日韩色区| 亚洲视频久久 | 国产一级毛片外aaaa | 亚洲国产一区二区三区精品 | 亚洲区在线播放 | 亚洲综合日韩中文字幕v在线 | 国产极品嫩模大尺度福利视频 | 久久精品国产亚洲妲己影院 | 91久久亚洲精品国产一区二区 | 欧美一区三区 | 伊人成影院九九 |