一 規範
(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