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

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

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

    posts - 89,  comments - 98,  trackbacks - 0
    final:
    final可以讓你控制你的成員、方法或者是一個類是否可被覆寫或繼承等功能,這些特點使final在Java中擁有了一個不可或缺的地位,也是學習Java時必須要知道和掌握的關鍵字之一。
    final成員
    當你在類中定義變量時,在其前面加上final關鍵字,那便是說,這個變量一旦被初始化便不可改變,這里不可改變的意思對基本類型來說是其值不可變,而對于對象變量來說其引用不可再變。其初始化可以在兩個地方,一是其定義處,二是在構造函數中,兩者只能選其一。
    下面程序很簡單的演示了final的常規用法:
    public?class?Test{
    ????final?int?t?=?1;?//?在定義時給值
    ????//?或者(兩者只能選其一)
    ????final?int?t;
    ????public?Test(){
    ????????t?=?3;?//?構造時給值
    }
    }

    還有一種用法是定義方法中的參數為final,對于基本類型的變量,這樣做并沒有什么實際意義,因為基本類型的變量在調用方法時是傳值的,也就是說你可以在方法中更改這個參數變量而不會影響到調用語句,然而對于對象變量,卻顯得很實用,因為對象變量在傳遞時是傳遞其引用,這樣你在方法中對對象變量的修改也會影響到調用語句中的對象變量,當你在方法中不需要改變作為參數的對象變量時,明確使用final進行聲明,會防止你無意的修改而影響到調用方法。
    另外方法中的內部類在用到方法中的參變量時,此參變也必須聲明為final才可使用,如下代碼所示:
    public?class?Test{
    ???void?print(final?String?str){
    ????????class?InnerTest{
    ????????????InnerTest?(){
    ????????????????System.out.println(str);
    ????????????}
    ????????}
    ????????InnerTest?it=new?InnerTest?();
    ????}
    ??public?static?void?main(String[]?args){
    ??????Test?test=new?Test();
    ??????test.print("Hello?word!!!");
    ??}
    }
    final方法
    將方法聲明為final那有兩個原因,第一就是說明你已經知道這個方法提供的功能已經滿足你要求,不需要進行擴展,并且也不允許任何從此類繼承的類來覆寫這個方法,但是繼承仍然可以繼承這個方法,也就是說可以直接使用。第二就是允許編譯器將所有對此方法的調用轉化為inline(行內)調用的機制,它會使你在調用final方法時,直接將方法主體插入到調用處,而不是進行例行的方法調用,例如保存斷點,壓棧等,這樣可能會使你的程序效率有所提高,然而當你的方法主體非常龐大時,或你在多處調用此方法,那么你的調用主體代碼便會迅速膨脹,可能反而會影響效率,所以你要慎用final進行方法定義。
    final類
    當你將final用于類身上時,你就需要仔細考慮,因為一個final類是無法被任何人繼承的,那也就意味著此類在一個繼承樹中是一個葉子類,并且此類的設計已被認為很完美而不需要進行修改或擴展。對于final類中的成員,你可以定義其為final,也可以不是final。而對于方法,由于所屬類為final的關系,自然也就成了final型的。你也可以明確的給final類中的方法加上一個final,但這顯然沒有意義。

    finally:
    finally?關鍵字是對?Java?異常處理模型的最佳補充。?finally?結構使代碼總會執行,而不管有無異常發生。使用?finally?可以維護對象的內部狀態,并可以清理非內存資源。如果沒有?finally,您的代碼就會很費解。例如,下面的代碼說明,在不使用?finally?的情況下您如何編寫代碼來釋放非內存資源:

    public?void?writeFile(String?filePath,?String?fileName,?String?args)
    ????????????throws?IOException

    ????{

    ????????FileWriter?fw?=?new?FileWriter(filePath?+?fileName);
    ????????try?{

    ????????????fw.write(args);
    ????????}?catch?(IOException?e)?{
    ????????????//1
    ????????????fw.close();
    ????????????throw?e;
    ????????}
    //2
    ????????fw.close();
    ????}
    這段代碼創建了一個FileWriter?object,并調用?write?方法。在退出該方法之前,您必須關閉FileWriter?object,以避免資源漏洞。為了完成這一任務,我們在?//2?處調用?close,它是該方法的最后一條語句。但是,如果?try?塊中發生一個異常會怎么樣呢?在這種情況下,//2?處的?close?調用永遠不會發生。因此,您必須捕獲這個異常,并在重新發出這個異常之前在?//1?處插入對?close?的另一個調用。這樣就可以確保在退出該方法之前關閉FileWriter?object。這樣編寫代碼既麻煩又易于出錯,但在沒有?finally?的情況下這是必不可少的。有了?finally,前面的代碼就可以重寫為以下的形式:

    public?void?writeFile(String?filePath,?String?fileName,?String?args)
    ????????????throws?IOException

    ????{

    ????????FileWriter?fw?=?new?FileWriter(filePath?+?fileName);
    ????????try?{

    ????????????fw.write(args);
    ????????}?catch?(IOException?e)?{
    ????????????throw?e;
    ????????}?finally?{

    ????????????fw.close();
    ????????}
    ????}
    finally?塊確保?close?方法總被執行,而不管?try?塊內是否發出異常。因此,可以確保在退出該方法之前總會調用?close?方法。這樣您就可以確信FileWriter?object被關閉并且您沒有泄漏資源。

    finalize:?

      根據Java語言規范,JVM保證調用finalize函數之前,這個對象是不可達的,但是JVM不保證這個函數一定會被調用。另外,規范還保證finalize函數最多運行一次。

      通常,finalize用于一些不容易控制、并且非常重要資源的釋放,例如一些I/O的操作,數據的連接。這些資源的釋放對整個應用程序是非常關鍵的。在這種情況下,程序員應該以通過程序本身管理(包括釋放)這些資源為主,以finalize函數釋放資源方式為輔,形成一種雙保險的管理機制,而不應該僅僅依靠finalize來釋放資源。
    posted on 2006-08-01 09:06 水煮三國 閱讀(560) 評論(0)  編輯  收藏 所屬分類: J2SE
    <2006年8月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(4)

    隨筆分類(85)

    隨筆檔案(89)

    文章分類(14)

    文章檔案(42)

    收藏夾(37)

    java

    oracle

    Sybase

    搜索

    •  

    積分與排名

    • 積分 - 210795
    • 排名 - 266

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲av产在线精品亚洲第一站| 牛牛在线精品观看免费正 | 99在线观看视频免费| 美女内射毛片在线看免费人动物| 国产精品视频永久免费播放| 国产成人亚洲精品91专区手机| 亚洲av无码国产精品色午夜字幕 | 精品国产一区二区三区免费| 毛片视频免费观看| 亚洲av日韩av不卡在线观看| 含羞草国产亚洲精品岁国产精品 | 亚洲日韩久久综合中文字幕| 国产精品青草视频免费播放| 午夜高清免费在线观看| 亚洲av福利无码无一区二区| 国产AV无码专区亚洲AV蜜芽| 国产成人无码免费看视频软件 | 亚洲人成欧美中文字幕| 日本亚洲欧洲免费天堂午夜看片女人员| 日韩电影免费在线观看视频| 亚洲视频在线观看网站| 手机看片国产免费永久| 亚洲Av无码国产情品久久| 亚洲中文字幕精品久久| 99在线精品免费视频九九视| 亚洲Av无码专区国产乱码DVD| 国产黄色免费观看| 亚洲韩国精品无码一区二区三区| 视频免费1区二区三区| 亚洲国产成人a精品不卡在线| 免费国产黄网站在线观看动图| 免费一级国产生活片| 四虎精品成人免费视频| 国产成人A亚洲精V品无码| 三级网站免费观看| 亚洲人成电影院在线观看| 99久久久精品免费观看国产 | 成人国产网站v片免费观看| www国产亚洲精品久久久| 一级毛片aa高清免费观看| 国产精品亚洲A∨天堂不卡|