要添加到其他答案:例外可以做一些工作。太常见了,他们告诉你,你的程序是绝望不稳定的,应该立即关闭。
通常情况下,他们告诉你发生了一些不好的事情,并给你一个机会向用户解释问题,然后继续。例如,一个意外的文件结束异常。你可以告诉用户该文件是坏的,让他们尝试另一个。您也可以打印堆栈跟踪,以便他们可以打电话给您,即使您未打印广泛的错误消息,也可以确定发生了什么情况。
请注意此异常的分裂特征。就像第一种类型(通常是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