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

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

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

    飛翔的起點

    從這里出發

    導航

    <2007年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    統計

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    java重載的解析

        從昨晚開始在看java疑惑這本書,打算以后每天把看的東西以這種方式寫下了
    來,一方面使所學的東西得到鞏固和復習,另一方面和大家共同進步.
        1. 在java中重載解析的過程是分兩個階段運行的,第一階段選取所有可獲得并且可以應用的方法或構造器,第二階段在第一階段選取的方法或構造器中選取最精確的一個.,如果一個方法或構造器可以接受傳遞給另一個方法或構造器的任何參數,那么說明第一個方法幣第二個方法缺乏精確性,
        2.在設計一個類的時候,如果該類構建于另一個累的行為之上,那么你有兩種選擇,一種是集成,即一個累擴展另一個累;另一個是組合,即在一個類中包含另一個類的實例.
           選擇的依據是:
           一個類的每一個實例都是另一個類的一個實例,還是都有另一個類的一個實例.在前一種情況下就使用集成,而在后一種情況下應該使用組合.當你不準時,優先選擇組合而不是繼承.
        3.靜態方法
        靜態方法在繼承中只能被隱藏而不可以重寫,靜態方法只能訪問靜態變量,它的參數和它定義的局部變量,訪問靜態方法盡可能的使用類名來訪問.
       今天就寫到這,有問題的地方可以指正,謝謝大家.

    posted on 2007-12-13 13:18 forgood 閱讀(3098) 評論(3)  編輯  收藏

    評論

    # re: java重載的解析 2007-12-13 13:44 cc

    是java解惑吧,java疑惑,難道越看越疑惑啊。  回復  更多評論   

    # re: java重載的解析 2007-12-18 18:54 forgood

    是呀,我也感覺如此,但是細細看的話,會發現好多經常遇到的問題,仔細的看看,可以鞏固\復習一些知識,
    共同進步,
      回復  更多評論   

    # re: java重載的解析[未登錄] 2007-12-19 09:22 ddpie

    謎題46:令人混淆的構造器案例
    本謎題呈現給你了兩個容易令人混淆的構造器。main方法調用了一個構造器,但是它調用的到底是哪一個呢?該程序的輸出取決于這個問題的答案。那么它到底會打印出什么呢?甚至它是否是合法的呢?
    public class Confusing {
    private Confusing(Object o) {
    System.out.println("Object");
    }
    private Confusing(double[] dArray) {
    System.out.println("double array");
    }
    public static void main(String[] args) {
    new Confusing(null);
    }
    }
    傳遞給構造器的參數是一個空的對象引用,因此,初看起來,該程序好像應該調用參數類型為Object的重載版本,并且將打印出Object。另一方面,數組也是引用類型,因此null也可以應用于類型為double[ ]的重載版本。你由此可能會得出結論:這個調用是模棱兩可的,該程序應該不能編譯。如果你試著去運行該程序,就會發現這些直觀感覺都是不對的:該程序打印的是double array。這種行為可能顯得有悖常理,但是有一個很好的理由可以解釋它。
    Java的重載解析過程是以兩階段運行的。第一階段選取所有可獲得并且可應用的方法或構造器。第二階段在第一階段選取的方法或構造器中選取最精確的一個。如果一個方法或構造器可以接受傳遞給另一個方法或構造器的任何參數,那么我們就說第一個方法比第二個方法缺乏精確性[JLS 15.12.2.5]。
    在我們的程序中,兩個構造器都是可獲得并且可應用的。構造器Confusing(Object)可以接受任何傳遞給Confusing(double[ ])的參數,因此Confusing(Object)相對缺乏精確性。(每一個double數組都是一個Object,但是每一個Object并不一定是一個double數組。)因此,最精確的構造器就是Confusing(double[ ]),這也就解釋了為什么程序會產生這樣的輸出。
    如果你傳遞的是一個double[ ]類型的值,那么這種行為是有意義的;但是如果你傳遞的是null,這種行為就有違直覺了。理解本謎題的關鍵在于在測試哪一個方法或構造器最精確時,這些測試沒有使用實際的參數:即出現在調用中的參數。這些參數只是被用來確定哪一個重載版本是可應用的。一旦編譯器確定了哪些重載版本是可獲得且可應用的,它就會選擇最精確的一個重載版本,而此時使用的僅僅是形式參數:即出現在聲明中的參數。
    要想用一個null參數來調用Confusing(Object)構造器,你需要這樣寫代碼:new Confusing((Object)null)。這可以確保只有Confusing(Object)是可應用的。更一般地講,要想強制要求編譯器選擇一個精確的重載版本,需要將實際的參數轉型為形式參數所聲明的類型。
    以這種方式來在多個重載版本中進行選擇是相當令人不快的。在你的API中,應該確保不會讓客戶端走這種極端。理想狀態下,你應該避免使用重載:為不同的方法取不同的名稱。當然,有時候這無法實現,例如,構造器就沒有名稱,因而也就無法被賦予不同的名稱。然而,你可以通過將構造器設置為私有的并提供公有的靜態工廠,以此來緩解這個問題[EJ Item 1]。如果構造器有許多參數,你可以用Builder模式[Gamma95]來減少對重載版本的需求量。
    如果你確實進行了重載,那么請確保所有的重載版本所接受的參數類型都互不兼容,這樣,任何兩個重載版本都不會同時是可應用的。如果做不到這一點,那么就請確保所有可應用的重載版本都具有相同的行為[EJ Item 26]。
    總之,重載版本的解析可能會產生混淆。應該盡可能地避免重載,如果你必須進行重載,那么你必須遵守上述方針,以最小化這種混淆。如果一個設計糟糕的API強制你在不同的重載版本之間進行選擇,那么請將實際的參數轉型為你希望調用的重載版本的形式參數所具有的類型。   回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费国产一级特黄久久| 国产人成免费视频| 亚洲2022国产成人精品无码区| 青草青草视频2免费观看| 免费大学生国产在线观看p| 视频一区在线免费观看| 亚洲国产精品国产自在在线 | 国产又黄又爽胸又大免费视频| 亚洲国产天堂久久久久久| 在线播放免费人成视频网站| 亚洲国产日韩成人综合天堂| 国产精品极品美女自在线观看免费 | 最近高清中文字幕无吗免费看| 亚洲视屏在线观看| 国产精品久久永久免费| 最新亚洲精品国偷自产在线| 国产无遮挡吃胸膜奶免费看视频| 午夜在线亚洲男人午在线| 久久久久亚洲AV成人网人人网站| 成人免费乱码大片A毛片| 99久久亚洲综合精品成人网| 久热中文字幕在线精品免费| 亚洲国产精品无码第一区二区三区 | 一级毛片免费视频网站| 亚洲国产精品特色大片观看完整版 | 一级女性全黄生活片免费看| 亚洲妇熟XXXX妇色黄| 久久这里只精品国产免费10| 亚洲免费在线视频观看| 国产最新凸凹视频免费| 国产在线精品免费aaa片| 亚洲国产精品线观看不卡| 免费国产a国产片高清网站| 色欲色香天天天综合网站免费| 色噜噜亚洲男人的天堂| 亚洲成a人片在线播放| 一级毛片免费观看不卡的| 色欲aⅴ亚洲情无码AV蜜桃| 337p日本欧洲亚洲大胆裸体艺术| 黄网站色在线视频免费观看| 国产精品亚洲色婷婷99久久精品|