編寫高質量JAVA代碼系列(建議1-10)讀後簡練總結

           建議1   不要在常量和變量中出現易混淆的字母

      比如:long l=1l;long l=11。

      建議2   莫讓常量蛻變成變量

      比如:加了final和static的常量也有可能會變哦, public static final  int i=newRandom().nextInt();這種常量的定義方式是極不可取的,要在編譯期就確定其值,不應該在運行期更改,否則無法確定在運行期間會發生什麼事情,注意務必要讓常量在運行期間保持不變,這樣纔是常量。

         建議3    三元操作符的類型務必一致

       三元操作符相當於if-else的簡化寫法,看以下代碼:   int i=80; 那麼string s1=String.valueOf(i<100?90:100 )、String s2=String.valueOf(i<100?90:100.0),那麼s1跟s2是相等的嗎?並不是,s1的值是90,而s2的值是90.0;若操作符中的兩個操作數不能轉換,則不做轉換,返回object類型;如何兩個操作數是確定類型,則按照正常的二進制數字轉換;此例中的s2就由int轉換成了float類型。

          建議4   避免帶有變長參數的方法重載

        java5引進了變長參數,該參數的目的就是爲了更好地提高方法的複用性,可以隨心所欲地傳遞實參數量,變長參數必須是方法中的最後一個參數,一個方法中不能定義多個變長參數。注意,這兩個方法,public void calprice(int price,int ... discount);public void calprice(int price,int discount); 如果調用的時候,calprice(100,75);這裏編譯器調用的是第二個方法,並不是第一個,將75轉換成{75}數組來執行,這裏或許就會出現與預想不一樣的情況。

          建議5  避免讓空值和null值威脅到變長方法

        public void methodA(String s,Integer... i);public void methodA(String s,String ss);當這個方法被調用時,如methodA("china");methodA("china",null);這兩個方法的調用都會報錯,這樣的方法重載違反了kiss原則(keep it simple,stupid)也稱懶人原則;報錯原因:因爲null值是沒有類型的,這兩個方法雖然都符合方法的調用標準,但是不知道該調用哪個方法

           建議6  覆寫變長方法也要循規蹈矩

         複寫方法要滿足幾點要求:複寫方法不能縮小訪問權限、參數列表要相同、返回類型也必須相同或者其子類、不能拋出新異常但可以拋出比父類更小更有限的異常或者不拋出異常。比如:基類(父類)中的方法void fun(int i,int ... discount);子類重寫該方法void fun(int i,int[] discount);用子類創建出父類,也就是向上轉型時,調用該方法時fun(100,50)此時不會有報錯信息,但是用子類直接創建,調用fun方法時,會報錯。因爲此時的50不會轉換成數組,int與int類型的數組不是同一個參數類型就會編譯時報錯。一定要注意,複寫的方法的參數與父類相同,不僅僅是類型、數量,還有顯示形式。

            建議7  警惕自增的陷阱

         i++表示的是先賦值後+1;++i是先加1後賦值;count=count++;要想讓count實現自增,將這個語句放在循環語句中是不可以的,count++是一個表達式,具有返回值;

           建議8 不要讓舊語法困擾你

         java中依然保留着冒號操作符,也就是從c語言中保留下來的,也稱爲跳轉標號。java語言拋棄了goto語法,是因爲goto語句它可以讓程序從多層循環中直接跳出來,這樣同時會造成代碼跳轉太混亂,也很難調試,所以拋棄了,但保留了該關鍵字;java中用break和continue關鍵字來替代它。

           建議9  少用靜態導入

        java5引入了靜態導入語法(import static),其目的是爲了減少代碼輸入量,提高閱讀性,更好的理解程序。比如直接import static java.lang.Math.PI 這樣下面的代碼中可以直接使用PI,不需要把類名也寫全。但是這樣就會缺少類名的修飾,靜態屬性和靜態方法的表象意義可以被無限放大,這樣就很難清楚其屬性或方法代表何意。對於靜態導入,要遵循兩個規則:一就是不使用*通配符,除非是靜態常量類;二方法名是具有明確清晰表象意義的工具類。

           建議10 不要在本類中覆蓋靜態導入的變量和方法

        如果覆蓋了的話,我們不知道哪個方法被調用了,編譯器會選擇就近原則,如果能夠在本類中找到該變量的話,就不會去其他包或者類中了,易產生困擾。

 

          

 

            

                  

                   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章