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

           Java語言習(xí)慣用語
          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)建長字符串時(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ò)誤條件 如小說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)樵谔幚磉^程中創(chuàng)建了一個(gè)新的對(duì)象。

               異常只能用于錯(cuò)誤處理,不應(yīng)該用來控制程序流程。
               ■ 使編譯器和運(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),通過一個(gè)OutputStream作為字節(jié)輸出會(huì)更快
                   一 在其它的容器內(nèi),通過一個(gè)PrintWriter輸出字符會(huì)更快
               ■ 這些技巧描述的是最可移植的建議
               ■ 你可能需要運(yùn)行一些基準(zhǔn)來判斷在你的平臺(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í)例非常簡單。

                  例如,下面是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)用中見到,如Web服務(wù)器、報(bào)價(jià)和拍賣應(yīng)用等。然而,創(chuàng)建Java線程需要相當(dāng)可觀的開銷。

              JDK 1.4引入了非阻塞的I/O庫(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)參見《盡可能使用堆棧變量》。

           

          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 @ 2009-02-17 21:37 wang9354| 編輯 收藏
               摘要: 主要使用的是java.util.Robot類來捕獲屏幕,可以實(shí)現(xiàn)對(duì)屏幕一個(gè)矩形區(qū)域的捕獲,通過這個(gè)類,我們也可以實(shí)現(xiàn)一個(gè)遠(yuǎn)程桌面控制的程序。 package com.qiu.util; import java.io.*; import java.net.*; import javax.swing.*; import java.a...  閱讀全文
          posted @ 2009-02-12 18:33 wang9354| 編輯 收藏
          僅列出標(biāo)題
          共2頁: 上一頁 1 2 

          導(dǎo)航

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆檔案

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 丰顺县| 漾濞| 神木县| 乐至县| 阿鲁科尔沁旗| 海原县| 竹北市| 静海县| 玛多县| 平远县| 贵溪市| 汉阴县| 盐源县| 集贤县| 兴义市| 临漳县| 贵溪市| 岳普湖县| 南部县| 正定县| 浮梁县| 临桂县| 关岭| 隆尧县| 厦门市| 尤溪县| 田东县| 龙山县| 罗江县| 封丘县| 娄底市| 龙门县| 邻水| 青岛市| 依兰县| 宾川县| 丰城市| 秦皇岛市| 临沧市| 崇义县| 双江|