“使用try-catch并抛出异常处理”,这是一个好方法吗?使用这种方法有哪些适用的利弊?
请查看下面的示例代码片段,我有一个try-catch块以及throws子句。 在下面的代码片段中,我尝试在catchExceptionMethod()中读取一个文件,该文件抛出FileNotFoundException并在catch块中捕获它。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class ExceptionTest {
public static void main(String[] args) {
ExceptionTest obj=new ExceptionTest();
try {
obj.catchExceptionMethod("test.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public void catchExceptionMethod(String path) throws FileNotFoundException{
try {
BufferedReader br=new BufferedReader(new FileReader(new File(path)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
正如其他人已经在他们的评论中指出的那样,捕获异常(不重新抛出它)并在throws
子句中声明它是无稽之谈,因为异常永远不会离开你的方法。
大多数情况下,捕获异常是不好的。如果你的方法无法完成它的工作,抛出一个异常,所以你的调用方法知道这个步骤失败并且可以中止它自己的计算(你通常只是在除了声明它之外什么也不做这个异常时得到这个非常有用的行为相关方法的throws
条款。)
只有当你知道如何有效地继续,甚至知道前面的某些步骤失败时才会抓住例外 - 通常情况下,你不能这样做,因此只能使用try-catch包含顶级操作,并记录异常对某些日志文件和通知用户来说,这是你能做的最好的事情。
问的问题是,在这种情况下,顶级行动是什么?通常情况下,它是一个代码块,可以完成程序来自外部的任务。
所以这取决于应用程序的类型。如果它是控制台应用程序,它通常是main()方法。对于桌面应用程序,顶级可能是菜单和按钮操作。如果它是某种服务器,它可能是从客户端实现某些请求的代码,依此类推。
通常情况下,您可以说:"嗯,那个[例如]一个开放文件操作]失败了,但它的成功并不是必要的,可以创建一个新文件,由用户选择。"
不要陷入构成解决问题算法的一系列行动的中间。如果某些先决条件步骤失败,很可能链条的其余部分会产生废话。