<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Reading "Thinking in Java" #5

    Posted on 2005-01-27 08:58 Blue Kong 閱讀(562) 評論(0)  編輯  收藏 所屬分類: Java World

    //從老家搬篇過來,看看排版與顯示效果如何。

     

    6. Reusing Classes

    Java編譯器并不會給任何reference產生缺省對象,這樣就避免了大多數情況下的不必要的負擔。初始化需要的對象可以在以下地點:

    1,對象定義處。由于類初始化順序的規則,這樣做可以保證以此方法初始化的對象將會在構造函數被調用前完成初始化。
    2,構造函數內部。
    3,當需要使用該對象時,這種方式被稱為(緩式初始化)lazy initialization。如果一個對象并非總是必須,那么這種方式可以減少額外負擔。

    關于清理動作,要注意的是順序:首先執行當前類的所有清理動作(其中次序和生成次序相反),而后再調用base class的清理函數。外帶一句,除了內存,最好永遠不要相信垃圾回收機制。

    Final data

    Bruce在這部分說:Java中final修飾對于基本類型和對象引用(object reference)而言,意義是不同的。用于基本類型時,final讓value(數值)保持不變。用于object reference時,final讓reference保持不變,但對象本身的內容卻是可以更動的惡。Java并未提供讓任何對象保持不變的機制,雖然可以自己編寫具有保持不變效果的class。特別提醒,array也是對象。

    我要說的是,我沒發現final在基本類型與對象引用的意義有何不同。final都是讓兩者的value保持不變,基本類型的value就是對應的數值或者bool值。而對象引用的value在理解上可以解釋為指向object的地址。當然,這里似乎對于Java的底層實現做了假設而我確實也沒細究過Java如何實現object reference的。但是,就Java語法及我個人的體會而言,我覺得這是很好的一種理解方式。

    Blank finals

    Java允許把數據成員聲明為final卻不賦予初始值。當然,final修飾的數據成員必須在其被使用前完成初始化,這一點由編譯器保證。這個特性讓我們可以把某個數據成員聲明為final具有不變的特性,卻在每個對象中為不同的值。

    Final arguments

    Java中還可以把method的arguments聲明為final,意義不變,只是不變特性的范圍僅僅在此method內。對于對象引用,即是在此method內擁有此對象的一個不可變更的引用,而不影響此對象存在其他非final的引用。

    Final method

    有兩個原因把一個method修飾成final。第一,對于類A中的某個method,你希望在類A所有子類中此方法的表現不變,即此方法不可被覆寫(overriding)。第二,處于效率考慮,因為編譯器會嘗試把不太長的final method改為inner method。而Bruce Eckel建議我們不要相信編譯器的智商,只在確實處于設計的考慮需要時,才把method修飾為final。

    final & private

    private的method對于子類是不可見的,自然也無法覆寫(overriding)。似乎,private隱含了final?如果一個函數已經是private,似乎final修飾與否都無關緊要? 
    首先,這兩個假設,前者錯誤,后者正確。因為private的method對于子類是不可見的, 所以對于子類而言如此的函數就如同是父類中的一段普通代碼。如果此時在子類中聲明一個與父類中的private method同名的函數,編譯器是允許的。然而,注意,此時只是在這個繼承體系中加入了一個新函數而已,并非是一個覆寫。因為覆寫(overriding)的前提是,被覆寫的函數是可見,是父類的對外的界面。至于對private函數再加final修飾,編譯器是允許的。但毫無意義,因為private的函數對于子類不可見,所以也就無需聲明是否允許覆寫(overriding)。

    下面還是貼段代碼來解釋:

    /*
     * Created on 2004-11-30
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     
    */

    package com.smilereader.test;

    /**
     * @author Sinbadblue Kong
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     
    */

    class Treasure {
        
        
    private final void f(){
            System.
    out.println("Treasure.f()");
        }

        
        
    private void g(){
            System.
    out.println("Treasure.g()");        
        }

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

        
    }


    /*
     * Created on 2004-12-5
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     
    */

    package com.smilereader.test;

    /**
     * @author Sinbadblue Kong
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     
    */

    class Gemstone extends Treasure {
        
        
    //    add a new method Gemstone.f(), it isn't an overriding
        public final void f(){
            System.
    out.println("Gemstone.f()");
            
        }

        
        
    //  add a new method Gemstone.g(), it isn't an overriding
        public void g(){
            System.
    out.println("Gemstone.g()");
        }

     
        
    //can't overriding Treasure.e()
    //    public void e(){
    //        System.out.println("Gemstone.e()");
    //    }

    }


    我覺得Java的編譯器在此處的處理不太合適,容易導致混淆。如果對于private 與 final修飾做互斥處理,我個人覺得會是比較合適的又容易理解的方式。

    主站蜘蛛池模板: 久久精品国产69国产精品亚洲| 亚洲天堂视频在线观看| 免费一区二区无码东京热| 亚洲国产精品国自产拍AV| 国产在线观看免费观看不卡| 黄色网址在线免费观看| 久久亚洲日韩看片无码| 国产精品免费电影| 免费观看久久精彩视频| 亚洲aⅴ无码专区在线观看春色| 国产亚洲精品xxx| 成年丰满熟妇午夜免费视频| 国产一区二区三区免费观在线| 亚洲综合伊人制服丝袜美腿| 亚洲人午夜射精精品日韩| 国产2021精品视频免费播放| sss在线观看免费高清| 久久亚洲精品专区蓝色区| 亚洲国产精品国自产拍AV| 国产三级免费电影| 91成人免费观看网站| 成人A片产无码免费视频在线观看| 亚洲精品无AMM毛片| 久久亚洲AV无码精品色午夜麻豆| 亚洲国产激情一区二区三区| 毛片免费观看网站| 97免费人妻在线视频| 精品一区二区三区高清免费观看 | 免费做爰猛烈吃奶摸视频在线观看| 国产日韩在线视频免费播放| 国产午夜亚洲精品| 亚洲视频中文字幕| 久久伊人久久亚洲综合| 亚洲免费无码在线| 国产男女猛烈无遮挡免费视频网站| 国产香蕉免费精品视频| 久久精品私人影院免费看| 一区二区视频免费观看| 国产成人+综合亚洲+天堂| 亚洲乱色伦图片区小说 | 亚洲精品成a人在线观看☆|