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

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

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

    隨筆-13  評(píng)論-28  文章-63  trackbacks-0
    1. private static Credit BaseCredit = new Credit();   
    2. public static Credit getNewCredit() {   
    3. return (Credit) BaseCredit.clone();   
    4. }   

     Java語(yǔ)言習(xí)慣用語(yǔ)
    1.循環(huán)
          ■ 在重要的循環(huán)里,消除循環(huán)終止判斷時(shí)的方法調(diào)用。。。
          例如:將...bt   www.bt285.cn      

    for(int i=0; i<collection.size();i++){   
    1.        ...   
    2.       }  

     

          替換為…
          

    1. for(int i=0; n=collection.size();i<n;i++){   
    2.        ...   
    3.       }  

     

          ■ 通常,把與循環(huán)index不相關(guān)的移到循環(huán)的外面
         

     
    1. for(int i=0; terminal=x.length;i<terminal;i++){   
    2.         x[i] = x[i]/scaleA *scaleB;   
    3.      }  

     

          應(yīng)該該成:
         

     
    1. Double scale =  scaleB*scaleA;   
    2.       for(int i=0; terminal=x.length;i<terminal;i++){   
    3.          x[i] = x[i]/scale ;   
    4.       }  

     

    2.字符串
         ■ 消除字符串連接
         ■ 創(chuàng)建長(zhǎng)字符串時(shí),總是使用StringBuffter代替String
         ■ 預(yù)先分配StringBuffer空間   StringBuffer sb = new StringBuffer(5000);

    3.基本數(shù)據(jù)類型
         ■ 在重要的循環(huán)里使用基本數(shù)據(jù)類型(int型數(shù)據(jù)通常比long/double型數(shù)據(jù)更快)
         ■ 基本數(shù)據(jù)類型(Boolean,Integer,etc)的包裝類主要用在當(dāng)傳遞的方法參數(shù)必須是一個(gè)對(duì)象的引用時(shí)(而不是一個(gè)基本數(shù)據(jù)類型)
         ■ 對(duì)所有的常量代數(shù)表達(dá)式使用static final修飾符
         ■ 使常量更容易引用(編譯器預(yù)先計(jì)算常量表達(dá)式)

     

    4.異常
         ■ 異常只用于單個(gè)真正的錯(cuò)誤條件 如小說(shuō)520網(wǎng) www.5a520.cn 拋出異常時(shí)
             拋出一個(gè)異常和執(zhí)行一個(gè)catch代碼塊花費(fèi)是很高的(主要由于當(dāng)創(chuàng)建一個(gè)異常時(shí)要獲得線程棧的一個(gè)快照)
             只當(dāng)條件真的異常時(shí)才拋出一個(gè)異常

         ■ 拋出異常首先要?jiǎng)?chuàng)建一個(gè)新的對(duì)象。

             Throwable接口的構(gòu)造函數(shù)調(diào)用名為fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆棧,收集調(diào)用跟蹤信息。

             只要有異常被拋出,VM就必須調(diào)整調(diào)用堆棧,因?yàn)樵谔幚磉^(guò)程中創(chuàng)建了一個(gè)新的對(duì)象。

         異常只能用于錯(cuò)誤處理,不應(yīng)該用來(lái)控制程序流程。
         ■ 使編譯器和運(yùn)行時(shí)最優(yōu)化,將幾個(gè)方法調(diào)用放在一個(gè)try/catch塊中,而不是為每個(gè)方法調(diào)用實(shí)現(xiàn)幾個(gè)try/catch塊

          

     
    1. try{   
    2.         Some.method1();   //Difficut for java1.4   
    3.     }catch(method1Exception e){   
    4.         handle exception 1  // to optimize this code   
    5.     }   
    6.          
    7. try{   
    8.         Some.method2();   //Difficut for java1.4   
    9.      }catch(method2Exception e){   
    10.         handle exception 2  // to optimize this code   
    11.      }   
    12.          
    13. try{   
    14.          Some.method3();   //Difficut for java1.4   
    15.      }catch(method3Exception e){   
    16.         handle exception 3  // to optimize this code   
    17.     }  

     

       應(yīng)該寫為:

     
    1. try{   
    2.       Some.method1();      
    3.       Some.method2();      
    4.       Some.method3();   //Difficut for java1.4   
    5.    }catch(method1Exception e){   
    6.        handle exception 1     
    7.    }catch(method2Exception e){   
    8.        handle exception 2     
    9.    }catch(method3Exception e){   
    10.        handle exception 3     
    11.    }  

     

    5.基準(zhǔn)

         ■ 注意,所有這些技巧會(huì)因不同的平臺(tái)和虛擬機(jī)而不同
             一 例如:在有些servlet容器內(nèi),通過(guò)一個(gè)OutputStream作為字節(jié)輸出會(huì)更快
             一 在其它的容器內(nèi),通過(guò)一個(gè)PrintWriter輸出字符會(huì)更快
         ■ 這些技巧描述的是最可移植的建議
         ■ 你可能需要運(yùn)行一些基準(zhǔn)來(lái)判斷在你的平臺(tái)上怎么樣是最快的

     

    6.不用new關(guān)鍵詞創(chuàng)建類的實(shí)例

         ■用new關(guān)鍵詞創(chuàng)建類的實(shí)例時(shí),構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會(huì)被自動(dòng)調(diào)用。

            但如果一個(gè)對(duì)象實(shí)現(xiàn)了Cloneable接口,我們可以調(diào)用它的clone()方法。clone()方法不會(huì)調(diào)用任何類構(gòu)造函數(shù)。

            在使用設(shè)計(jì)模式(Design Pattern)的場(chǎng)合,如果用Factory模式創(chuàng)建對(duì)象,則改用clone()方法創(chuàng)建新的對(duì)象實(shí)例非常簡(jiǎn)單。

            例如,下面是Factory模式的一個(gè)典型實(shí)現(xiàn):

            

     
    1. public static Credit getNewCredit() {   
    2.    return new Credit();   
    3.   }   

            優(yōu)化后:

     
    1. private static Credit BaseCredit = new Credit();   
    2. public static Credit getNewCredit() {   
    3.     return (Credit) BaseCredit.clone();   
    4. }   

           上面的思路對(duì)于數(shù)組處理同樣很有用。

         

    7.使用非阻塞I/O 

          Java版本較低的JDK不支持非阻塞I/O API。為避免I/O阻塞,一些應(yīng)用采用了創(chuàng)建大量線程的辦法(在較好的情況下,會(huì)使用一個(gè)緩沖池)。這種技術(shù)可以在許多必須支持并發(fā)I/O流的應(yīng)用中見(jiàn) 到,如Web服務(wù)器、報(bào)價(jià)和拍賣應(yīng)用等。然而,創(chuàng)建Java線程需要相當(dāng)可觀的開(kāi)銷。

        JDK 1.4引入了非阻塞的I/O庫(kù)(java.nio)。如果應(yīng)用要求使用版本較早的JDK,在這里有一個(gè)支持非阻塞I/O的軟件包。

     

    8.不要重復(fù)初始化變量 

          ■默認(rèn)情況下,調(diào)用類的構(gòu)造函數(shù)時(shí), Java會(huì)把變量初始化成確定的值:所有的對(duì)象被設(shè)置成null,整數(shù)變量(byte、short、int、long)設(shè)置成0,float和 double變量設(shè)置成0.0,邏輯值設(shè)置成false。

          當(dāng)一個(gè)類從另一個(gè)類派生時(shí),這一點(diǎn)尤其應(yīng)該注意,因?yàn)橛胣ew關(guān)鍵詞創(chuàng)建一個(gè)對(duì)象時(shí),構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會(huì)被自動(dòng)調(diào)用。

     

    9.盡量指定類的final修飾符 

           ■帶有final修飾符的類是不可派生的。在Java核心API中,有許多應(yīng)用final的例子,例如java.lang.String。為String類指定final防止了人們覆蓋length()方法。

       另外,如果指定一個(gè)類為final,則該類所有的方法都是final。Java編譯器會(huì)尋找機(jī)會(huì)內(nèi)聯(lián)(inline)所有的final方法(這和具體的編譯器實(shí)現(xiàn)有關(guān))。此舉能夠使性能平均提高50%。

     

    10.盡量使用局部變量 

           ■調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在棧(Stack)中,速度較快。其他變量,如靜態(tài)變量、實(shí)例變量等,都在堆(Heap)中創(chuàng)建,速度較慢。另外,依賴于具體的編譯器/JVM,局部變量還可能得到進(jìn)一步優(yōu)化。請(qǐng)參見(jiàn)《盡可能使用堆棧變量》。

     

    11.乘法和除法 

           ■考慮下面的代碼:

     
    1. for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }   

            優(yōu)化后:

     
    1. for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }   

     

           修改后的代碼不再做乘以8的操作,而是改用等價(jià)的左移3位操作,每左移1位相當(dāng)于乘以2。相應(yīng)地,右移1位操作相當(dāng)于除以2。值得一提的是,雖然移位操作速度快,但可能使代碼比較難于理解,所以最好加上一些注釋。 
    posted on 2009-02-20 23:58 七匹狼 閱讀(178) 評(píng)論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 国产成人精品日本亚洲| 亚洲视频免费一区| 免费看黄的成人APP| 亚洲网址在线观看| 日韩电影免费在线| 男人的天堂网免费网站| 亚洲码欧美码一区二区三区| 国产午夜亚洲不卡| 西西大胆无码视频免费| 男人免费视频一区二区在线观看 | 亚洲国产一区二区三区青草影视| 免费福利网站在线观看| 亚洲日韩在线观看免费视频| 久久久久亚洲AV成人片| 亚洲国产精品不卡毛片a在线| 18成禁人视频免费网站| 日韩精品免费一线在线观看| 亚洲码一区二区三区| 伊人婷婷综合缴情亚洲五月| 好爽…又高潮了毛片免费看| 国产午夜不卡AV免费| 亚洲成a∨人片在无码2023| 亚洲另类激情综合偷自拍| 四虎永久免费地址在线网站| 免费观看美女用震蛋喷水的视频| 久久久久女教师免费一区| 亚洲熟妇久久精品| 日产亚洲一区二区三区| 中国亚洲女人69内射少妇| 日韩精品视频免费在线观看| 久久国产精品成人片免费| 一级毛片免费在线播放| 亚洲精华液一二三产区| 亚洲综合图片小说区热久久| 夜夜春亚洲嫩草影院| 国产一区视频在线免费观看| 亚洲人成网站免费播放| 久久午夜夜伦鲁鲁片免费无码影视| 日本亚洲高清乱码中文在线观看| 亚洲最大的视频网站| 久久亚洲国产视频|