儘管問題是通用的,但我會提到引發查詢的場景。程序模型是否在速度方面過度使用異常處理?
方案:
我很感興趣,分析大量的字符串(數字者尤其是)。因此,我的第一份工作是過濾那些甚至包含數字以外的單個字符的那些。
一個簡單的方法來做到這一點(在Java中):
for (String val : stringArray){
try{
int num = Integer.parseInt(val);
doSomething(num);
}
catch(NumberFormatException nfe){}
}
其中不得不提的另一點是,在數組中是純數字的字符串只有5%左右。因此,總之,會涉及很多追趕。
我想知道的是,無論這是一種有效的設計方法,還是我應該考慮採用其他方法來做同樣的事情?
結論基於答案:例外確實是昂貴的,它不是一個很好的設計實踐將它們作爲控制語句的一種形式。 因此,人們應該儘可能尋找替代品,並且如果例外情況看起來更加清晰/容易,應該記錄下來。
使用一個分析器來查看什麼在減慢您的程序。你在那裏做的事情本質上是正確的,因爲如果字符串是數字的話沒有其他標準的文本方式。 –
@dystroy:我不是說這會讓程序變慢。它工作正常。但是我的測試案例非常少(大約1000個字符串),但實時可能涉及的不僅僅是這些。再一次,它的純粹推測,因爲我不知道異常處理如何在java中工作,但我猜一個異常可能有某種繼承樹。所以如果有異常,它會嘗試並找出在不同的類中引發了哪個異常。此外,拋出異常似乎是停止代碼流的嚴酷方式,不是嗎? (我在開玩笑) –
這是一種苛刻的方式,是的,但這就是java的製作方式:在許多情況下(如這個),它是標準的分支方式。 –