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 {
-
新手學習Java最高效的10個計劃
對於新手來説學習Java如同堵天書,下面是本站小編收集的關於新手學習Java最高效的10個計劃,希望可以為您的學習帶來幫助!計劃一:瞭解未來技術發展方向兩耳不聞窗外事,在如今是不合適的,尤其是在瞬息萬變的互聯網時代,作為一個開發者技術跟不上可以去專研,思想要跟不上,...
-
java中length和length()的區別
泉水,奮鬥之路越曲折,心靈越純潔。以下是小編為大家搜索整理了java中length和length()的區別,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!length是屬性,一般集合類對象擁有的屬性,取得集合的大小。例如:數組th就是取得數組的長度。length()是...
-
講述java讀取properties文件的方法
講述java讀取properties文件的方法1.不在項目中讀取:Propertiesproperties=newProperties();BufferedReaderread=newBufferedReader(newInputStreamReader(newFileInputStream("文件的.路徑"),"utf-8"));(read);propertiesroperty("那個文件的key")2.在項目中讀...
-
java面試自我介紹範文
引導語:Java面試自我介紹應以突顯自我能力為主,表現出與眾不同的才幹和學識。以下是本站小編分享給大家的2017java面試自我介紹範文,歡迎閲讀!範文一我叫趙,我的同學更都喜歡稱呼我的英文名字,叫,六月的意思,是君的諧音。我來自安徽的市,在21年我以市全市第一名的成績...