在Java中生成未处理的异常中断程序
假设我们有一个位于调用堆栈深处的函数。此函数执行多个操作,并调用5个引发异常的不同函数 在C#中,我可以保留这些异常,并确保如果抛出其中任何异常,那么程序就会中断。这就是我在这里所希望的——这些异常应该停止程序。在Java中,我在编译时会出错。据我所知,我有两种选择:在Java中生成未处理的异常中断程序,java,c#,exception,Java,C#,Exception,假设我们有一个位于调用堆栈深处的函数。此函数执行多个操作,并调用5个引发异常的不同函数 在C#中,我可以保留这些异常,并确保如果抛出其中任何异常,那么程序就会中断。这就是我在这里所希望的——这些异常应该停止程序。在Java中,我在编译时会出错。据我所知,我有两种选择: 处理所有这些问题并保持程序运行。但正如我所说的,我确实想破坏程序,处理所有异常可能只会把代码弄得一团糟 使函数重新显示这些异常。但是,如果我在调用堆栈中这么做,我就需要在其他级别上进行重试。这听起来真是个糟糕的设计 把事情弄清楚—
抛出来声明它们。e、 g
void doStuff(String name) throws FileNotFoundException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(name));
.... do stuff
}
或者,您可以重新引发异常并将其包装为未检查的异常:
void doStuff(String name) {
BufferedInputStream bis;
try {
bis = new BufferedInputStream(new FileInputStream(name));
} catch(FileNotFoundException e) {
throw new RuntimeException(e);
}
.... do stuff
}
但是,正如我前面所说的,这是由编译器强制执行的,因此,有另一种方法可以绕过它
具有绕过编译器检查的@skillythrows
注释。即使在C#中,未处理的异常也几乎总是一个坏主意。如果您不想在发生异常的函数中处理它们,那么应该将异常抛出堆栈,并且您的顶级函数应该通过调用应用程序上的exit或任何适用于您正在执行的操作的方法来处理错误。仅仅让一个异常杀死你的应用程序并不是一个很好的做法。void skillythrow(Throwable t)throws t{throw(t)t;}