我一直在網上搜索和研究一些書籍,但給出的例子是有限的,我仍然對用戶定義的異常有些懷疑。用戶定義異常的實現
使用以下代碼作爲示例:
//Conventional way of writing user-defined exception
class IdException extends Exception
{
public IdException(String s)
{
super(s);
}
}
class Product
{
String id = new String();
public Product(String _id) throws IdException
{
id = _id;
//Check format of id
if (id.length() < 5)
throw(new IdException(_id));
}
}
似乎寫入用戶定義的異常的傳統方式是幾乎總是相同的。在用戶定義的異常的構造函數中,我們始終調用super(msg)
。這在我觸發一個問題:如果大多數例外以這種方式實現,所有這些例外之間有什麼區別?
例如,我可以有多個用戶定義的異常,但似乎沒有任何差異,可以做同樣的事情。 (有這些異常沒有實現,是什麼讓他們的工作?)
例子:
class IdException extends Exception
{
public IdException(String s)
{
super(s);
}
}
class NameException extends Exception
{
public NameException(String s)
{
super(s);
}
}
class ItemException extends Exception
{
public ItemException(String s)
{
super(s);
}
}
QUE:所以我們不應該(例如)實施id
內檢查異常類?如果不是所有異常類似乎都做同樣的事情(或者什麼都不做)。
在異常實施檢查的例子:
class IdException extends Exception {
public IdException(String s)
{
super(s);
//Can we either place the if-statements here to check format of id ?
}
//Or here ?
}
這就是我不明白這一點。如果我們不在例外情況下實施邏輯。在我的例子中,'IdException','NameException'和ItemException似乎都做同樣的事情。那麼爲什麼我們仍然實現了許多相同的異常呢?謝謝。 – user3437460
@ user3437460可以在代碼中重用異常的類型,以便爲'try {...} catch(...){...}'塊中的不同類型的異常生成不同的分支(請參閱@ sp00ms答案)和你可以從關鍵參數中創建一個格式化的消息,使'throw'代碼更具可讀性,並且仍然產生一個漂亮可讀的消息文本(參見我的答案)。 – AlexR
自定義異常是自定義原因的原因。在每個自定義異常中,您都可以非常明確地定製您的信息 –