繁体   English   中英

“使用try-catch并同时抛出异常并进行处理”,这是一个好方法吗?

[英]“Using try-catch and throws both for exception handling”, is it a good approach?

“使用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();
        }
    }
}

正如其他人在评论中已经指出的那样,捕获异常(不将其重新抛出)并在throws子句中声明是无稽之谈,因为该异常永远不会离开您的方法。

在大多数情况下,捕获异常是不好的。 如果您的方法无法完成其工作,则引发异常,因此您的调用方法知道此步骤失败,并且可以中止其自身的计算(通常,除了在throws声明之外,不对异常进行任何处理即可得到非常有用的行为相关方法的条款)。

仅在知道了上一步失败的情况下才知道如何继续有用的异常时-通常,您不会捕获异常,因此,仅将顶级操作与try-catch一起使用,将异常记录到一些日志文件中,经常通知用户是您可以做的最好的事情。


有人问,在这种情况下什么是最高层的行动? 通常,它是一段代码,可以完成程序外部的某些任务。

因此,这取决于应用程序的类型。 如果是控制台应用程序,则通常是main()方法。 对于桌面应用程序,顶层可能是菜单和按钮操作。 如果是某种服务器,则可能是实现客户端请求的代码,依此类推。

通常,在这里您可以说:“嗯,[例如,打开文件的操作]失败了,但是成功执行下一步操作并不一定要成功(可能是根据用户的选择创建新文件) ]。”

不要陷入构成问题解决算法的一系列动作的中间。 如果某个先决条件步骤失败,则链的其余部分很可能会产生废话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM