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

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

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

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

     Java語言習慣用語
    1.循環
          ■ 在重要的循環里,消除循環終止判斷時的方法調用。。。
          例如:將...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.       }  

     

          ■ 通常,把與循環index不相關的移到循環的外面
         

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

     

          應該該成:
         

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

     

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

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

     

    4.異常
         ■ 異常只用于單個真正的錯誤條件 如小說520網 www.5a520.cn 拋出異常時
             拋出一個異常和執行一個catch代碼塊花費是很高的(主要由于當創建一個異常時要獲得線程棧的一個快照)
             只當條件真的異常時才拋出一個異常

         ■ 拋出異常首先要創建一個新的對象。

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

             只要有異常被拋出,VM就必須調整調用堆棧,因為在處理過程中創建了一個新的對象。

         異常只能用于錯誤處理,不應該用來控制程序流程。
         ■ 使編譯器和運行時最優化,將幾個方法調用放在一個try/catch塊中,而不是為每個方法調用實現幾個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.     }  

     

       應該寫為:

     
    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.基準

         ■ 注意,所有這些技巧會因不同的平臺和虛擬機而不同
             一 例如:在有些servlet容器內,通過一個OutputStream作為字節輸出會更快
             一 在其它的容器內,通過一個PrintWriter輸出字符會更快
         ■ 這些技巧描述的是最可移植的建議
         ■ 你可能需要運行一些基準來判斷在你的平臺上怎么樣是最快的

     

    6.不用new關鍵詞創建類的實例

         ■用new關鍵詞創建類的實例時,構造函數鏈中的所有構造函數都會被自動調用。

            但如果一個對象實現了Cloneable接口,我們可以調用它的clone()方法。clone()方法不會調用任何類構造函數。

            在使用設計模式(Design Pattern)的場合,如果用Factory模式創建對象,則改用clone()方法創建新的對象實例非常簡單。

            例如,下面是Factory模式的一個典型實現:

            

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

            優化后:

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

           上面的思路對于數組處理同樣很有用。

         

    7.使用非阻塞I/O 

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

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

     

    8.不要重復初始化變量 

          ■默認情況下,調用類的構造函數時, Java會把變量初始化成確定的值:所有的對象被設置成null,整數變量(byte、short、int、long)設置成0,float和 double變量設置成0.0,邏輯值設置成false。

          當一個類從另一個類派生時,這一點尤其應該注意,因為用new關鍵詞創建一個對象時,構造函數鏈中的所有構造函數都會被自動調用。

     

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

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

       另外,如果指定一個類為final,則該類所有的方法都是final。Java編譯器會尋找機會內聯(inline)所有的final方法(這和具體的編譯器實現有關)。此舉能夠使性能平均提高50%。

     

    10.盡量使用局部變量 

           ■調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧(Stack)中,速度較快。其他變量,如靜態變量、實例變量等,都在堆(Heap)中創建,速度較慢。另外,依賴于具體的編譯器/JVM,局部變量還可能得到進一步優化。請參見《盡可能使用堆棧變量》。

     

    11.乘法和除法 

           ■考慮下面的代碼:

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

            優化后:

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

     

           修改后的代碼不再做乘以8的操作,而是改用等價的左移3位操作,每左移1位相當于乘以2。相應地,右移1位操作相當于除以2。值得一提的是,雖然移位操作速度快,但可能使代碼比較難于理解,所以最好加上一些注釋。  

    posted @ 2009-02-17 21:37 wang9354| 編輯 收藏
         摘要: 主要使用的是java.util.Robot類來捕獲屏幕,可以實現對屏幕一個矩形區域的捕獲,通過這個類,我們也可以實現一個遠程桌面控制的程序。 package com.qiu.util; import java.io.*; import java.net.*; import javax.swing.*; import java.a...  閱讀全文
    posted @ 2009-02-12 18:33 wang9354| 編輯 收藏
    僅列出標題
    共2頁: 上一頁 1 2 

    導航

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

    統計

    常用鏈接

    留言簿(2)

    隨筆檔案

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲综合无码无在线观看| 亚洲xxxxxx| 久久精品成人免费国产片小草| 免费看片A级毛片免费看| 亚洲色欲色欱wwW在线| 成人免费AA片在线观看| 亚洲人成综合网站7777香蕉| www.黄色免费网站| 亚洲av日韩av永久在线观看| 国产精品成人免费综合| 羞羞视频免费观看| 中文字幕亚洲一区| 在线观看免费无码视频| 久久精品蜜芽亚洲国产AV| 日韩av无码成人无码免费| 亚洲AV无码成人网站在线观看 | 57pao一国产成永久免费| 亚洲乱码日产精品BD在线观看| 国产卡二卡三卡四卡免费网址 | www.999精品视频观看免费| 亚洲精品无码久久久久YW| 男人的天堂亚洲一区二区三区 | 亚洲国产精品热久久| 久久午夜夜伦鲁鲁片免费无码影视| 亚洲精品午夜在线观看| 免费三级毛片电影片| 国产精品亚洲一区二区三区在线观看| 又爽又黄无遮挡高清免费视频| 韩日电影在线播放免费版| 精品日韩亚洲AV无码一区二区三区| 4hu四虎最新免费地址| 国产精品亚洲一区二区三区在线观看| 国产精品亚洲综合一区| 一级毛片免费观看不卡视频| 亚洲色偷偷综合亚洲av78| 亚洲中文字幕无码爆乳AV| 日本h在线精品免费观看| 免费看一级毛片在线观看精品视频| 亚洲avav天堂av在线不卡| 日本免费人成黄页网观看视频 | 9久久免费国产精品特黄|