給JAVA設(shè)計開發(fā)新手的一些建議與意見(2)
發(fā)表時間:2024-01-16 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]【處理好你的異! ----------------- 異常處理是Java編程中非常重要的一個部分。建議在使用異常之前閱讀或者。 下面從書中摘出幾條建議: *絕對不要忽略異常 *千萬不要隱藏異常*** *僅在不正常的情況下使用異常 *對可恢復的情況使用可檢查異常,...
【處理好你的異! -----------------
異常處理是Java編程中非常重要的一個部分。建議在使用異常之前閱讀或者。
下面從書中摘出幾條建議:
*絕對不要忽略異常
*千萬不要隱藏異常***
*僅在不正常的情況下使用異常
*對可恢復的情況使用可檢查異常,對程序錯誤使用運行時異常(RunTimeException)
*給方法引發(fā)的異常做文檔
*在詳細信息里面包括失敗捕獲信息
*使用finally避免資源泄漏
*。。。。
在這里特別提出的是,在開發(fā)中要特別處理NULL的情況,否則經(jīng)常引發(fā)NullPointException異常,在Java里這是一個最令人頭疼的異常了。
如果你的程序因為一個NULL值,而報了幾十個NullPointException的話,不但得讓人煩死,而且還非常難以找到錯誤所在。所以在Java中一定要注意這個問題。
如果你的函數(shù)不允許Null值,那么可以截獲它,拋出一個異常,或者給客戶更友好的提示,難道不好嗎?
讓我們來看一個例子:
public String getName(User aUser)
{
//如果aUser為Null,會發(fā)生什么情況
return aUser。getName();
}
很明顯,如果參數(shù)為Null,就會拋出異常。應(yīng)該改為:
public String getName(User aUser)
{
if(null=aUser)
{
return "";
}
else
{
return aUser。getName();
}
}
或者你要求參數(shù)不能為空,還可以拋出一個異常,強制使用者不能傳入空值。
還有經(jīng)常被忽略的是RunTimeException和普通異常的區(qū)別,在Java中,這是一個特殊的異常類,程序中如果遇到這個異常,用戶可以不截獲它,而如果是其他的普通異常,就不許要截獲它。我們的代碼經(jīng)常這么寫:
try
{
//your code here
}
catch(Exception e)
{
//do warn
}
這樣寫的話,就截獲了所有異常,當然也包括了RunTimeException。 在很多情況下,這是不合適的處理方式,我們只應(yīng)截獲必要的異常,而應(yīng)該忽略RuntimeException。
關(guān)于RunTimeException,在Spring中還有更好的利用方式,建議閱讀Spring框架中在事務(wù)中對異常的處理代碼,例如對Jdbc拋出的SqlException的轉(zhuǎn)換。
關(guān)于異常處理,我提出幾點建議:
*捕獲異常而且再次拋出時要包含原來的異常信息
*不要忘了RunTimeException,除非必要,否則不要用catch(Exception e)的方式捕獲所有異常。
*不要用異常做流程控制,異常的性能代價比較高昂。(對此,可能有人不同意。此處不詳細討論)
*不要把異常處理都拋給別人,本函數(shù)有能力處理的就不要拋出。
在此建議讀者詳細閱讀或者。
我們可以看到,這個類的主要目的是得到計算結(jié)果,所以正確的接口應(yīng)該類似:
public interface Counter
{
int getResult();
}
但是很多情況下,經(jīng)常是這樣的接口:
public interface Counter
{
int getResult();
int getN1();
int getN2();
void setN1(int n1);
void setN2(int n2);
}
我們想一想,這樣做有2個后果:
1。除了getResult之外,其他的函數(shù)我們根本用不到,所以是多余的。
2。如果我們要自己實現(xiàn)一個Counter,如果接口中僅僅定義了getResult,我們僅僅需要實現(xiàn)它就可以了。我們自己的類可能是多個數(shù)運算,有乘除加減等等各種運算,參數(shù)也有可能是一些數(shù)組。但是如果按照第二種方法聲明接口的話,我們就必須實現(xiàn)后面的四個方法,如果這樣的話,實現(xiàn)這樣東西不僅沒用,而且浪費時間。我們恐怕要大聲罵娘了吧。
所以,接口有好的作用,但是不要濫用。
■ 如果你的接口永遠只有一個類實現(xiàn),那么可能就沒有必要用接口。
■ 你的接口只需要聲明別人用到的函數(shù)即可。