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

深入Java Final

 更新時(shí)間:2013年04月15日 10:27:55   作者:  
本篇文章,小編將為大家介紹Java Final,有需要的朋友可以參考一下

JAVA關(guān)鍵字final用于修飾數(shù)據(jù)、方法或類,通常意味著“無法改變的”,既數(shù)據(jù)不能改變,方法不能覆蓋,類不能繼承。一般采用final有兩種原因:設(shè)計(jì)和效率。而隨著JAVA版本的更新,一些效率上的問題可以交由編譯器和JVM處理。因此,采用final來解決效率問題就顯得不是那么重要了。

Final修飾符大多運(yùn)用于基本數(shù)據(jù)類型(primitive)域或者不可變(immutable)類的域(如果類中的所有方法方法都不會改變其對象,這種類就是不可變類。String就是一個(gè)不可變類)。

【final數(shù)據(jù)】

Final關(guān)鍵字用修飾數(shù)據(jù)主要有兩種情況:

1. 編譯期常量

2. 運(yùn)行時(shí)初始化的值

對于編譯期常量,指的是一個(gè)既是final又是static的域(依照慣例,編譯期常量全部用大寫字母命名,并且用下劃線分隔各個(gè)單詞),它只占據(jù)一段不能改變的存儲空間。編譯器可以將編譯期常量代入到任何可能用到它的計(jì)算式中,也就是說,可以在編譯時(shí)執(zhí)行計(jì)算式,這相對減輕了運(yùn)行時(shí)負(fù)擔(dān)。編譯期常量在定義時(shí)必須對它賦值(不一定是基本類型)。

運(yùn)行時(shí)初始化的值,對于基本類型,final使得其值不可改變;而對于對象引用,final使得引用不可改變,即無法將其改為指向另一個(gè)對象,然而,對象本身卻可以修改(適用于數(shù)組,數(shù)組也是對象)。

復(fù)制代碼 代碼如下:

public class javaFinalData{

    private static final String TESTD = "test";
    public static final String TESTE = "test";
    public static final String[] TESTF = {"1","2"}; //非基本類型
    private static final String[] TESTG = new String[2];

    public static void main(String args[]){
        final int testA = 1;
        final String testB = "test";
        final int[] testC = {1,1,2,};
        System.out.println(testC[1]);
        testC[1] = 123;
        System.out.println(testC[1]);
    }
}

【未賦值的final域】

JAVA允許生成未賦值的final域,但是必須在域的定義處或者每個(gè)構(gòu)造器中對final域進(jìn)行賦值(有多少個(gè)構(gòu)造器就必須賦值幾次),確保在使用前被初始化。采用這種方式,可以使得final運(yùn)用得更加靈活,在同一個(gè)類中,根據(jù)不同的對象賦予不同的值,卻又保持不可改變的特性。

復(fù)制代碼 代碼如下:

public class javaBlankFinal{
    private final int blank;

    public javaBlankFinal(){
        blank = 2011;
    }

    public javaBlankFinal(int temp){
        blank = 2012;
    }

    public javaBlankFinal(String temp){
        blank = 2014;
    }

    public static void main(String args[]){
        new javaBlankFinal();
    }
}

【final方法】

       使用final方法有兩方面原因:一是將方法鎖定,防止方法被覆蓋,確保在繼承中方法行為保持不變;二是將方法調(diào)用轉(zhuǎn)為內(nèi)聯(lián)調(diào)用(inlining),以減少方法調(diào)用的開銷。但是,在最近的版本中,JVM可以自行進(jìn)行優(yōu)化,因此無需使用final方法來處理效率問題。

       關(guān)于final方法,還有一點(diǎn)需要注意,類中所有的private方法都隱式地指定為final方法(也可以為其加上final修飾,但沒有意義)。當(dāng)你試圖覆蓋一個(gè)private方法,編譯器并沒有報(bào)錯(cuò),但是,實(shí)際上你并沒有覆蓋該方法,只是生成了一個(gè)新方法。因?yàn)閜rivate方法是無法被外部類所訪問的,當(dāng)然就無法覆蓋到它了。

       使用@Override注解可以防止上述問題。如程序所示:

復(fù)制代碼 代碼如下:

class finalFunction{
    private void finalFunctionA(){
        System.out.println("finalFunctionA");
    }

    private final void finalFunctionB(){
        System.out.println("finalFunctionB");
    }

    final void finalFunctionC(){
        System.out.println("finalFunctionC");
    }

    void functionD(){}
}

class overrideFinalFunction extends finalFunction{
    //@Override   添加@Override注解可以識別是否是override
    public void finalFunctionA(){              
        System.out.println("override finalFunctionA");
    }

    public final void finalFunctionB(){
        System.out.println("override finalFunctionB");
    }

    //final void finalFunctionC(){}   //Cannot override the final method from finalFunction

    @Override  
    void functionD(){} //真正的override方法
}

public class javaFinalFunction extends finalFunction{
    public static void main(String args[]){
        finalFunction ff = new finalFunction();
        //ff.finalFunctionA();  //無法調(diào)用private方法
        //ff.finalFunctionB();

        overrideFinalFunction off = new overrideFinalFunction();
        off.finalFunctionA();   //public方法
        off.finalFunctionB();
    }
}


【final類】

使用final類一般是出于設(shè)計(jì)原因,不允許該類被繼承。這樣可以保證類的行為不會改變,或許還能避免一些安全危機(jī)。Final類中所有的方法都隱式指定為final方法,因此無法被覆蓋(因?yàn)閒inal類禁止繼承,也就無法覆蓋其類中的方法)。在Java核心API中,有許多應(yīng)用final的例子,例如java.lang.String。為String類指定final防止覆蓋length()等方法。

對于final域來說,即使將一個(gè)類聲明為final,類中的域不會自動(dòng)成為final域。

復(fù)制代碼 代碼如下:

final class finalClass{
    int testA = 2011;
}
//class extendFinalClassextends finalClass{}  //can not extendthe final class finalClass

public class javaFinalClass{
    public static void main(String args[]){
       finalClass fc = new finalClass();
       System.out.println(fc.testA);
       fc.testA = 2012;
       System.out.println(fc.testA);
    }
}

相關(guān)文章

  • 詳解path和classpath的區(qū)別

    詳解path和classpath的區(qū)別

    這篇文章主要介紹了詳解path和classpath的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • java實(shí)現(xiàn)的xml格式化實(shí)現(xiàn)代碼

    java實(shí)現(xiàn)的xml格式化實(shí)現(xiàn)代碼

    這篇文章主要介紹了java實(shí)現(xiàn)的xml格式化實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-11-11
  • 基于Java的Scoket編程

    基于Java的Scoket編程

    本文詳細(xì)講解了基于Java的Scoket編程,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • 關(guān)于MyBatisSystemException異常產(chǎn)生的原因及解決過程

    關(guān)于MyBatisSystemException異常產(chǎn)生的原因及解決過程

    文章講述了在使用MyBatis進(jìn)行數(shù)據(jù)庫操作時(shí)遇到的異常及其解決過程,首先考慮了事務(wù)問題,但未解決,接著懷疑是MyBatis的一級緩存問題,關(guān)閉緩存后問題依舊存在,最終發(fā)現(xiàn)是SQL映射文件中的參數(shù)傳遞錯(cuò)誤,使用了錯(cuò)誤的標(biāo)簽導(dǎo)致循環(huán)插入
    2025-01-01
  • java構(gòu)造器的重載實(shí)現(xiàn)實(shí)例講解

    java構(gòu)造器的重載實(shí)現(xiàn)實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于java構(gòu)造器的重載實(shí)現(xiàn)實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • Spring中的InitializingBean接口的使用

    Spring中的InitializingBean接口的使用

    這篇文章主要介紹了Spring中的InitializingBean接口的使用,需要的朋友可以參考下
    2018-04-04
  • 用SpringBoot+Vue+uniapp小程序?qū)崿F(xiàn)在線房屋裝修管理系統(tǒng)

    用SpringBoot+Vue+uniapp小程序?qū)崿F(xiàn)在線房屋裝修管理系統(tǒng)

    這篇文章主要介紹了用SpringBoot+Vue+uniapp實(shí)現(xiàn)在線房屋裝修管理系統(tǒng),針對裝修樣板信息管理混亂,出錯(cuò)率高,信息安全性差,勞動(dòng)強(qiáng)度大,費(fèi)時(shí)費(fèi)力等問題開發(fā)了這套系統(tǒng),需要的朋友可以參考下
    2023-03-03
  • Java實(shí)現(xiàn)企業(yè)微信消息推送功能的詳細(xì)步驟

    Java實(shí)現(xiàn)企業(yè)微信消息推送功能的詳細(xì)步驟

    這篇文章主要介紹了Java實(shí)現(xiàn)企業(yè)微信消息推送功能,本文圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • JAVAsynchronized原理詳解

    JAVAsynchronized原理詳解

    這篇文章主要介紹了Java中synchronized實(shí)現(xiàn)原理詳解,涉及synchronized實(shí)現(xiàn)同步的基礎(chǔ),Java對象頭,Monitor,Mark Word,鎖優(yōu)化,自旋鎖等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 零基礎(chǔ)寫Java知乎爬蟲之抓取知乎答案

    零基礎(chǔ)寫Java知乎爬蟲之抓取知乎答案

    上篇文章我們已經(jīng)能把知乎的問題抓出來了,但是答案還木有抓出來。這一回合,我們就連著把答案也一起從網(wǎng)站中摳出來=。=
    2014-11-11

最新評論

集安市| 古丈县| 屯门区| 叶城县| 贵南县| 平遥县| 浮山县| 阿城市| 博白县| 永定县| 高青县| 新乡市| 双桥区| 延安市| 西昌市| 池州市| 南京市| 白水县| 洛扎县| 大埔县| 马鞍山市| 合水县| 綦江县| 民县| 塘沽区| 凤庆县| 东乡族自治县| 漠河县| 焉耆| 阳高县| 辉县市| 竹溪县| 自治县| 东阳市| 漯河市| 平安县| 子长县| 静宁县| 旅游| 错那县| 怀集县|