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

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

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

    離弦之Ray

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks
    Final constrants

           在編程中,用final變量來聲明一些常量,這樣就不用在每個用到這個常量數(shù)字的地方打入令人厭煩的復雜數(shù)字(比如PI),只要打入這個常量名字就行了。這大家都知道,可是要注意,這種常量是在編譯階段才被替換的(所謂替換,就是把程序中用到這個常量名字的地方,用常量本身來替代)。那意味著,如果其它類用到了這個常量,如果常量的值發(fā)生了更改,那用到這個常量的類必須重新build一下,否則那個類里還是以前的值。

            如果在程序中你用到了private final static常量,并且只在某一個方法內用到,那么你應該把它的聲明移到方法以內。如果被兩個以上的方法用到,那么還是留在類聲明里。

    移入方法內部后,不用寫private關鍵字,而且程序看起來比較簡單。


    Final Variables

    首先寫個例子

    public static String someMethod(final String environmentKey){

               final String key = "env." + environmentKey;

              System.out.println("Key is :" + key);

               return (System.getProperty(key));

    }

            在method中聲明的final變量和常量是不同的,不同之處在于method-scoped final variables are variable。每次進入這個方法內部,這個變量就被初始化一次。當然,這些變量都是運行時進行替換,而不像常量是在編譯時進行替換。


    Final Parameters

    將方法的parameters聲明成final,可以防止,在方法體內部這個參數(shù)被篡改。很好的best practice


    Final Collections

            public final static Set VALID_COLORS; 這句語句是不是聲明了一個final set?答案是NO。這只是聲明了一個final引用,也就是VALID_COLORS這個引用不能被更改。

            如果重新聲明一個引用指向這個對象,那么這個對象還是能夠更改的,所以這并不是一個final set。那么怎樣做才能真正得到一個final set呢?

    public final static Set VALID_COLORS;

    static{

    Set temp = new HashSet();

    temp.add(Color.red);

    temp.add(Color.blue);

    ...

    VALID_COLORS = Collections.unmodifiableSet(temp);

    }

            在實現(xiàn)自己的unmodifiable collections factory的時候,除了要實現(xiàn)Collectionseriallizable接口以外,對于Collection中定義的寫操作,要重載。方法體中可以簡單地拋出UnsupportedOperationException異常。

    Instance-Scoped Variables

            說白了,就是那些在對象被實例化的時候才被初始化的屬性,并且是不能被修改的。那么就把他聲明成final吧。

    exprivate final Date creationDate =

    Calendar.getInstance(TimeZone.getTimeZone("GMT")).getTime();

    這么做的話,就可以防止誤操作,改變這個本來不應該變的值。


    Final Classes

    ex:

    public final class SomeClass(){

    //...Class contents

    }

            這樣的class 不能被繼承。

            還有一種方法實現(xiàn),就是把它所有的構造函數(shù)都改成private的。

            這在設計模式中sigleton模式中見過,但這就限制了這個類的重用,所以取個折衷,可以把構造函數(shù)聲明成protected的。


    Final Method

    這個很熟悉了,一個類中的某個方法如果被聲明成final的,那么這個類的子類是不能override這個方法的。


    Conditional Complilation

            編程的時候我們常常會使用System.out.println(".....");來顯示一些程序的運行情況,但在真正交付的時候,我們并不希望這些語句被編譯到class文件里面去。

            一個做法是所有這種類型的語句前面加上一個if(booleanParameter),然后通過設置這個booleanParameter來實現(xiàn)要不要運行這些語句,編譯器在編譯的時候如果發(fā)現(xiàn)if里面的語句不可達,那么會將這些程序代碼直接去掉。

            疑問就是這些booleanParameter放在哪里比較好和方便。作者給出的建議是在包中專門建一個類,里面存放這些靜態(tài)的boolean常量,當然,命名的時候要仔細。名字要指出用在哪里。

    posted on 2007-10-23 14:07 離弦之ray的技術天空 閱讀(303) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 国产男女猛烈无遮挡免费视频网站 | 欧洲人免费视频网站在线| 亚洲第一永久AV网站久久精品男人的天堂AV | 亚洲国产区男人本色| 扒开双腿猛进入爽爽免费视频| 亚洲成av人片不卡无码| 最近中文字幕国语免费完整 | CAOPORN国产精品免费视频| 亚洲国产一成久久精品国产成人综合| 老司机亚洲精品影院在线观看 | 91成人免费观看网站| 久久精品亚洲AV久久久无码| 国产在线观看免费观看不卡| 亚洲视频在线观看2018| 久久亚洲最大成人网4438| 久久久久久久免费视频| 亚洲精品国产日韩| 免费国产成人高清在线观看麻豆| 国产大陆亚洲精品国产| 亚洲色偷偷狠狠综合网| 精品国产污污免费网站 | 免费黄色毛片视频| 免费人成视频在线播放| 国外亚洲成AV人片在线观看 | 性色av无码免费一区二区三区| 亚洲日本在线电影| 亚洲?V乱码久久精品蜜桃 | 中文字幕在线免费视频| 亚洲AV无码欧洲AV无码网站| 88xx成人永久免费观看| 一本色道久久88—综合亚洲精品 | 日韩一区二区三区免费播放| 亚洲av午夜福利精品一区人妖| h视频在线观看免费网站| 亚洲AV无码AV男人的天堂不卡| 亚洲日本一区二区三区在线不卡| 国产成人久久AV免费| 亚洲乱妇熟女爽到高潮的片| 亚洲色图综合在线| 成人AV免费网址在线观看| 深夜福利在线视频免费|