NO IMAGE

筆者一直強調,作為程式設計師,的基本素養有兩點:
一是專業,即:對程式碼匠藝精神保持敬畏之心
二是CC,即:任何一個傻瓜都能寫出計算機可以理解的程式碼,唯有寫出人類容易理解的程式碼,才是優秀的程式設計師

作為一個使用Java語言的程式設計師,想要做到專業,程式碼匠藝精神和整潔程式碼風格,至少我認為,除了CC基本原則外,還是需要做到以下細節,或者編碼規範的。

以下內容來自工作中的總結,詳見JDK說明或原始碼,不足之處請指正。

【細節1】獲取當前時間毫秒用System.currentTimeMillis() 而不是new Date()

1、獲取時間毫秒數時System.currentTimeMillis()方法比new Date().getTime()效率高,因為new Date().getTime()方法呼叫的System.currentTimeMillis()
2、另外,System.nanoTime()返回的是納秒,nanoTime而返回的可能是任意時間,甚至可能是負數。所以其主要的用途是衡量一個時間段,比如說一段程式碼執行所 用的時間,獲取資料庫連線所用的時間,網路訪問所用的時間等

  public Date()
{
this(System.currentTimeMillis());
}

【細節2】Arrays

1、Arrays.binarySearch(xxxxx)方法時,需要保證陣列是按升序進行排序的。所以使用前,請務必先Arrays.sort(xxxxx);

2、Arrays.asList(T… a) 方法時,返回一個受指定陣列支援的固定大小的列表。不支援對List的add操作。

3、Array.newInstance()方法時,
Class domainClazz = Class.forName( domainClassName );
                    Class clazz = Array.newInstance( domainClazz, 0 ).getClass();

【細節3】狀態測試方法(hasNext)和相應的呼叫方法(next)使用

1、如果是缺少同步的併發訪問,或者可被外界改變狀態,使用可識別返回值的方法是非常必要的,因為在測試狀態(hasNext)和對應的呼叫(next)之間存在一個時間視窗,在該視窗中,物件可能會發生狀態的變化。因此,在該種情況下應選擇返回可識別的錯誤返回值的方式。
2、如果狀態測試方法(hasNext)和相應的呼叫方法(next)使用的是相同的程式碼,出於效能上的考慮,沒有必要重複兩次相同的工作,此時應該選擇返回可識別的錯誤返回值的方式。
3、對於其他情形則應該儘可能考慮”狀態測試”的設計方式,因為它可以帶來更好的可讀性。

【細節4】finally

1、finally語句在任何情況下都必須執行的程式碼,這樣可以保證一些在任何情況下都必須執行程式碼的可靠性。比如,在資料庫查詢異常的時候,應該釋放JDBC連線等等。
2、finally語句先於return語句執行,而不論其先後位置,也不管是否try塊出現異常。finally語句唯一不被執行的情況是方法執行了System.exit()方法。System.exit()的作用是終止當前正在執行的Java虛擬機器。
3、finally語句塊中不能通過給變數賦新值來改變return的返回值,也建議不要在finally塊中使用return語句,沒有意義還容易導致錯誤。