重新探索自我

              客觀條件受制于人,并不足懼。重要的是,我們擁有選擇的自由,可以對現實環境積極回應,
              為生命負責,為自己創造有利的機會,做一個“真正”操之在我的人!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            3 隨筆 :: 10 文章 :: 5 評論 :: 0 Trackbacks

          ?

          一、 General Techniques

          1、? 引數以 by value 方式而非 by reference 方式傳遞

          2、? 對于不變的 data object reference 使用 final ,final 僅僅令 object reference 自身成為不變量,但并不限制它所指向對象的改變

          3、? 缺省情況下,所有 non-static 都可以被覆寫,不然 , 則用 final 防止覆寫

          4、? vector 容器包含的是對象,與 arrays 要區別,但我認為 Vector 的功能實際上有些像跟 Array List 差不多,只是 vector 現在不經常使用

          5、? 多態優于 instanceof ,只有在不得已的情況下使用

          “如果你根據對象的型別來觸發行為,那就改給自己一個耳光”

          例如,當你必須從一個 base type 做向下轉型為 derived type 的時候,必須使用它

          ….

          Vector shapeVector = new Vector(10);

          shapeVector.add(new Triangle());

          shapeVector.add(new Triangle());

          shapeVector.add(new Circle());

          ??? //...

          ??? //Assume many Triangles and Circles are added and removed

          ??? //...

          ??? int size = shapeVector.size();

          ??? for (int i=0; i<size; i++)

          ??? {

          ????? Object o = shapeVector.get(i);

          ????? if (o instanceof Triangle)

          ????? {

          ??????? if (((Triangle)o).isRightTriangle())

          ??????? {

          ????????? //...

          ??????? }

          ????? }

          ????? else if (o instanceof Circle)

          ????? {

          ??????? double rad = ((Circle)o).radius();

          ??????? //...

          ????? }

          }

          ???????? 6 、一旦不需要對象的引用,就將它設為 null

          ?????? 盡管有 GC, 你還是要關注的你的代碼如何運用內存;

          ????????

          ?

          二、? 對象與相等性

          7 、區分 reference type primitive type ,理解他們的差異,你會在運用他們時候做出明智的

          選擇;

          ???????? Boolean(boolean)

          ???????? Character(char)

          Byte(byte)

          Integer(int)

          Float(float)

          Long(long)

          Short(short)

          Double(double)

          基本型別相等,只要是值相等就可以拉,不管是不是同一類型;而引用類型必須則按照引用的比較方式來比較,譬如 equals();

          ?

          8 java.lang.object 提供的 equals() 方法很多時候不是你想要的,你需要自己寫一些比較的方法

          public boolean equals(Object obj)

          ? {

          ?

          ??? if (this == obj)

          ????? return true;

          ?

          ??? if (obj != null && getClass() == obj.getClass())

          ??? {

          ????? Golfball gb = (Golfball)obj;? //Classes are equal, downcast.

          ????? if (brand.equals(gb.brand()) &&? //Compare attributes.

          ????????? make.equals(gb.make()) &&

          ????????? compression == gb.compression())

          ????? {

          ??????? return true;

          ????? }

          ??? }

          ??? return false;

          ? }

          ?

          三、? java 異常

          1、?? try,cacth,finally

          ?

          不要將 catch 的異常覆蓋掉,在這樣的情況下,我們要專門把異常保存下來,如用一個 vector 保存;

          不要忽略任何一個異常,因為異常一旦出現,拋出異常的那個線程將會終止;

          將一個異常加入到 throw 子句,會影響到調用它的所有函數

          使用 finally 防止資源泄露,譬如在連接數據庫的時候在 finally 中關閉連接;

          不要從 try 字段中返回;

          不要用 try catch 用于流程控制 ;

          不要每逢出錯的使用 try catch;

          不要在構造函數中拋出異常;

          拋出異常前,請將對象置為有效狀態;

          四、? 性能

          1、?? 先把焦點放在設計,數據機構和算法方面

          2、?? 如果進行字符串的拼接,用 String Buffer String 快許多倍

          3、?? 在面向對象中,對象的創建是昂貴的,因此需要將對象的創建成本降到最低,減少一些沒有必要的對象,在非必要的時候,別產生你的對象

          4、?? 將同步減少到最低,增加 stack 的使用

          5、?? 使用基本型別代碼會更快

          6、?? 在使用 vector 時候,用 get() 來獲取對象,而不是 Interator

          7、?? 優先使用 array, 再考慮 ArrayList Vector ,如果不需要 vector 的同步特性,考慮使用 ArrayList

          8、?? 盡可能的重復使用對象,這比重新創建對象更有效

          9、?? 使用緩式評估,延遲計算,不必要的計算永遠都不要計算

          10、 手動優化你的代碼,特別是執行的順序

          posted on 2006-11-23 18:50 蔣利文 閱讀(252) 評論(0)  編輯  收藏 所屬分類: J2EE開發

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 美姑县| 大宁县| 班玛县| 阜城县| 平舆县| 静海县| 山丹县| 蒙山县| 腾冲县| 乐都县| 海伦市| 靖宇县| 梅河口市| 武穴市| 韶山市| 泗水县| 芦溪县| 诸暨市| 鄂伦春自治旗| 阜康市| 通道| 大埔县| 东乌珠穆沁旗| 新竹县| 辉县市| 宁波市| 定结县| 雷州市| 呼图壁县| 龙口市| 元谋县| 长子县| 武宁县| 永平县| 东丰县| 绥中县| 德兴市| 咸丰县| 乐至县| 苍梧县| 自贡市|