當前位置:才華齋>計算機>java語言>

Java程式設計的常見問題

java語言 閱讀(1.02W)

每天在寫Java程式,其實裡面有一些細節大家可能沒怎麼注意,這不,有人總結了一個我們程式設計中常見的問題。下面是小編為大家整理的Java程式設計的常見問題,歡迎參考~

Java程式設計的常見問題
  Java程式設計的常見問題

  優先返回空集合而非null

如果程式要返回一個不包含任何值的集合,確保返回的是空集合而不是null。這能節省大量的"if else"檢查。

public class getLocationName {

return (null==cityName ? "": cityName);

}

 頻繁使用計時器

錯誤程式碼:

for (...) {

long t = entTimeMillis();

long t = Time();

Date d = new Date();

Calendar c = new GregorianCalendar();

}

每次new一個Date或Calendar都會涉及一次本地呼叫來獲取當前時間(儘管這個本地呼叫相對其他本地方法呼叫要快)。

如果對時間不是特別敏感,這裡使用了clone方法來新建一個Date例項。這樣相對直接new要高效一些。

正確的寫法:

Date d = new Date();

for (E entity : entities) {

mething();

pdated((Date) e());

}

如果迴圈操作耗時較長(超過幾ms),那麼可以採用下面的方法,立即建立一個Timer,然後定期根據當前時間更新時間戳,在我的系統上比直接new一個時間物件快200倍:

private volatile long time;

Timer timer = new Timer(true);

try {

time = entTimeMillis();

duleAtFixedRate(new TimerTask() {

public void run() {

time = entTimeMillis();

}

}, 0L, 10L); // granularity 10ms

for (E entity : entities) {

mething();

pdated(new Date(time));

}

} finally {

el();

}

捕獲所有的異常

錯誤的寫法:

Query q = ...

Person p;

try {

p = (Person) ingleResult();

} catch(Exception e) {

p = null;

}

這是EJB3的一個查詢操作,可能出現異常的原因是:結果不唯一;沒有結果;資料庫無法訪問,而捕獲所有的異常,設定為null將掩蓋各種異常情況。

正確的寫法:

Query q = ...

Person p;

try {

p = (Person) ingleResult();

} catch(NoResultException e) {

p = null;

}

忽略所有異常

錯誤的寫法:

try {

doStuff();

} catch(Exception e) {

l("Could not do stuff");

}

doMoreStuff();

這個程式碼有兩個問題, 一個是沒有告訴呼叫者, 系統調用出錯了. 第二個是日誌沒有出錯原因, 很難跟蹤定位問題。

正確的寫法:

try {

doStuff();

} catch(Exception e) {

throw new MyRuntimeException("Could not do stuff because: "+ essage, e);

}

重複包裝RuntimeException

錯誤的寫法:

try {

doStuff();

} catch(Exception e) {

throw new RuntimeException(e);

}

正確的'寫法:

try {

doStuff();

} catch(RuntimeException e) {

throw e;

} catch(Exception e) {

throw new RuntimeException(essage(), e);

}

try {

doStuff();

} catch(IOException e) {

throw new RuntimeException(essage(), e);

} catch(NamingException e) {

throw new RuntimeException(essage(), e);

}

  不正確的傳播異常

錯誤的寫法:

try {

} catch(ParseException e) {

throw new RuntimeException();

throw new RuntimeException(ring());

throw new RuntimeException(essage());

throw new RuntimeException(e);

}

主要是沒有正確的將內部的錯誤資訊傳遞給呼叫者. 第一個完全丟掉了內部錯誤資訊, 第二個錯誤資訊依賴toString方法, 如果沒有包含最終的巢狀錯誤資訊, 也會出現丟失, 而且可讀性差. 第三個稍微好一些, 第四個跟第二個一樣。

正確的寫法:

try {

} catch(ParseException e) {

throw new RuntimeException(essage(), e);

}