天天看點

Java開發注意事項

一  規範

(1)命名

 變量:mNumberOfPlayer(number_of_player)

常量:INTEM_IMAGE(intem_image,intemImage)

(2)方法 

命名:采用小駝峰式

注意:

1、嚴格要求自己寫體量小的方法,一個方法在20行左右(getter、setter一行解決),方法過大一定要分拆,比如如多 if-else裡面的内容完全可以分别拆出2個單獨方法 

2、避免空方法(Methods should not be empty)

如果有特殊原因寫了内容為空的方法,一定要有詳細的注釋說明原因。

3、表達式不應該太複雜(Expressions should not be too complex,maximum allowed 3)

 if(edge == DragEdge.Right && childRight <= getWidth()&& childBottom <= getHeight()&&                childTop >= getPaddingTop()&& childLeft >= getPaddingLeft())

 4、字元串字面值不應重複(String literals should not be duplicated)

HashMapmap =newHashMap();

map.put("ItemImage", R.drawable.wb_icon_myproject);

map.put("ItemImage", R.drawable.wb_icon_myproject2);

修改為:

constant String INTEM_IMAGE="ItemImage";

 map.put(INTEM_IMAGE, R.drawable.wb_icon_myproject2);

二  規避Bug

(1)java.lang.NullPointerException

空指針最為常見,也最容易規避,使用的時候一定要進行null check,采取不信任原則:

方法形參要判空後才使用;

全局變量容易被系統回收或者更改,使用全局變量前建議判空;

第三方接口的調用,對傳回值進行判空。

(2)java.util.ConcurrentModificationException

異常示例:java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)

異常代碼示例:

mTimer.schedule(newTimerTask() {

        public voidrun() {

                  initEleLocationData();

          }},0,DELAY_TIME_InitData);

mTimer.schedule(newTimerTask() {

 public void  run() {

   if(mEleInfoList!=null) {

           for(HashMap mInfoMap :mEleInfoList) {

                      calculateTime(mInfoMap);}

  }}},0,DELAY_TIME);

[原因分析]:該異常表示疊代器疊代過程中,疊代的對象發生了改變,如資料項增加或删除。

由于疊代對象不是線程安全,在疊代的過程中,會檢查modCount是否和初始modCount即expectedModCount一緻,如果不一緻,則認為資料有變化,疊代終止并抛出異常。常出現的場景是,兩個線程同時對集合進行操作,線程1對集合進行周遊,而線程2對集合進行增加、删除操作,此時将會發生ConcurrentModificationException異常。

具體解決方法:多線程通路時要增加同步鎖,或者建議使用線程安全的集合:

1. 使用ConcurrentHashMap替換HashMap,CopyOnWriteArrayList替換ArrayList;

2. 或者使用使用Vector替換ArrayList,Vector是線程安全的。Vector的缺點:大量資料操作時,由于線程安全,性能比ArrayList低.

(3)java.lang.IllegalArgumentException: You must pass in a non null

(4)Switch   "switch" statements should end with "default" clauses

持續補充。。。