要添加到其他答案:例外可以做一些工作。太常見了,他們告訴你,你的程序是絕望不穩定的,應該立即關閉。
通常情況下,他們告訴你發生了一些不好的事情,並給你一個機會向用戶解釋問題,然後繼續。例如,一個意外的文件結束異常。你可以告訴用戶該文件是壞的,讓他們嘗試另一個。您也可以打印堆棧跟蹤,以便他們可以打電話給您,即使您未打印廣泛的錯誤消息,也可以確定發生了什麼情況。
請注意此異常的分裂特徵。就像第一種類型(通常是RunTimeException實例)一樣,它們讓你確切地知道發生了什麼,幾乎沒有你做任何事情。但是,Java也迫使你意識到IOException 可能被拋出並試圖強迫你爲用戶寫一條好消息。我一直對此感到困惑。如果我發現EOFException,我知道發生在哪裏,我不需要堆棧跟蹤。 (當然,如果我知道一個EOF 不可能發生,我不會打擾給用戶一個正確的消息,並且當它發生時的堆棧跟蹤將非常方便。)
但是有一個第三種例外,就是前一個例外的第二個人格。它只是讓你知道正常發生的事情。它非常高效(如果您設置正確,請參閱下文)。它可以比在一堆方法調用中返回值更清潔。它允許一個已經返回的方法,比如說一個String(空引用完全可以)來提醒調用方法一個特殊的條件,並且可選地提供這種條件下的大量數據。
public static class MyEOFException extends EOFException {
// Saves creating a meaningless stack trace.
public Throwable fillInStackTrace() { return this; }
}
// Saves creating a new object every time you use it
public static MyEOFException myEOF = new MyEOFException();
然後,在方法內部:
try {
for (;;) {
String text = readAStringFromFile(in);
// Do something with text...
}
}
catch (MyEOFException e) {
// Nothing at all needs to be done here.
// Note that MyEOFException COULD have beeen set up with tons of data and
// then a lot of work could be done. (The file might end with binary
// data, for instance, which would be in "e".)
}
的異常可能會被拋出上下多層次,它會彈出你圈外的相當整齊。在大多數情況下,這太簡單了。通常它太複雜了; try-catch塊可能很煩人。喜歡的東西:
while (readAStringFromFile(in));
要好很多快寫,如果readAStringFromFile
有把它看的地方。
在你的具體情況下,使用這樣的exeptions可能是你的教授正在尋找的東西。我個人的經驗是,與try-catch塊相比,幾乎總是有一種更好的方式來做到這一點,但是當他們工作的時候,他們的工作非常好。
如果你發現異常,那麼程序不會突然結束。確保你在catch語句中指定了正確的Exception類。 – DaveJohnston
只需在catch子句之後的括號之間插入想要捕獲的異常,並且您有解決方案:catch(InvalidCommandException e){// ignore} –
當您知道它是垃圾時,是否真的想繼續處理該文件? ? – toto2