2016 - 2024

感恩一路有你

java异常代码描述正确 java web项目中如何优雅的处理异常?

浏览量:1365 时间:2023-07-02 16:10:35 作者:采采

java web项目中如何优雅的处理异常?

Java中的异常为识别和响应错误情况提供了一致的机制。有效的异常处理可以使程序更加健壮和易于调试。异常是一种强大的调试方法,因为它回答了以下三个问题:

哪里出了问题?哪里出问题了?为什么会出问题?当有效使用异常时,异常类型answers "什么?"和异常堆栈跟踪答案 "哪里 "异常信息回答 "为什么?"。如果你的异常没有。;如果你没有回答以上所有的问题,那么你可能没有回答。;t.好好利用它们。有三个原则可以帮助您在调试过程中充分利用异常。这三项原则是:

为了解释有效异常处理的这三个原则,具体到早抛晚抓

捕捉异常时尽可能清晰也很重要。例如,FileNotFoundException可以通过重新询问用户来处理。;的文件名如下。对于EOFException,它可以根据抛出异常前读取的信息继续运行。

文件首选文件新文件(prefs filename)尝试{ read preferences(prefs File)} catch(filenotfoundexceptionN e){ // Warn the user that the specified file//does not exist }catch (EOFException e){ // who have reached the end of the file//

通过使用多个catch块,可以为用户提供关于捕获的异常的清晰信息。例如,如果捕获到一个FileNotFoundException,它可以提示用户指定另一个文件,在某些情况下,多个catch块会带来额外的编码工作量。这可能是不必要的负担,但在这种情况下,额外的代码确实有助于程序提供更友好的用户响应。

尽早抛出异常堆栈信息,提供导致异常的方法调用链的确切顺序,包括每个方法调用的类名、方法名、代码文件名甚至行号,从而准确定位异常发生的场景。

At (local method)

At ()

At ()

At ()

At ()

At()显示了FileInputStream类的open()方法如何引发NullPointerException。但是,注意()是标准Java类库的一部分,这个异常的原因很可能是me。我们的代码本身,而不是Java API。所以问题很可能出现在前面的某个方法中,不过还好也打印在堆栈信息中。

不幸的是,NullPointerException是Java中信息量最少(但也是最常遇到和崩溃的)的异常。它不 不要提我们最关心的:其中是null。因此,我们必须后退几步,找出问题所在。

通过回退跟踪堆栈信息并检查代码,我们可以确定错误的原因是传递给readPreferences()的空文件名参数。因为readPreferences()知道它可以 不处理空文件名,它会立即检查以下情况:

公共void读取首选项(字符串文件名)抛出IllegalArgumentException { if(filename null){ thRow new IllegalArgumentException}//If other operations ... the input stream in the new filePreference file ...}

通过尽早抛出异常(也称为 "快速故障 "),例外才能清晰准确。堆栈信息立即反映出哪里(提供了非法的参数值),为什么出错(文件名不能为空),以及哪里出错(readPreferences()的第一部分)。。这样,我们的堆栈信息可以如实提供:

File name is empty.

At ()

At ()

At ()

At ()

此外,其中包含的异常信息( "文件名为空 ")通过显式回答什么是空的问题,丰富了异常提供的信息,这是我们前面的代码中抛出的NullPointerException所没有提供的。

通过在检测到错误时立即抛出异常来实现快速失败,可以有效避免不必要的对象构造或资源占用,如文件或网络连接。同样,打开这些资源带来的清理操作也可以省略。

新手和专家都会因延迟捕获而犯的一个错误是在程序能够处理异常之前捕获它。Java编译器通过要求必须捕获或抛出检测到的异常,间接地鼓励了这种行为。自然的方法是立即将代码包装在try块中,并使用c。Atch捕获异常以防止编译器报告错误。

问题是,捕获后的异常应该怎么处理?最后要做的就是什么都不做。一个空的catch块就相当于把整个异常扔进了一个黑洞,所有能解释什么时候、什么地方、为什么出了问题的信息都将永远丢失。It 把异常写在日志里好一点,至少有记录可查。但是我科学家可以 不要期望用户阅读或理解日志文件和异常信息。It readPreferences()显示错误消息对话框也是不合适的,因为尽管JCheckbook目前是一个桌面应用程序,但我们也计划将它转变为一个基于HTML的We。b应用。在这种情况下,显示错误对话框显然不是一个选项。同时,无论HTML还是C/S版本,都是在服务器上读取配置信息,需要将错误信息显示到Web浏览器或客户端程序上。

ReadPreferences()在设计时应该考虑这些未来的需求。用户界面代码和程序逻辑的适当分离可以提高代码的可重用性。

然后在最外层捕捉异常,统一处理:

文件首选文件新文件(prefs filename)尝试{ read preferences(prefs File)} catch(filenotfoundexceptionN e){ // Warn the user that the specified file//does not exist }catch (EOFException e){ // who have reached the end of the file//

Spring统一异常处理如果是Spring框架,可以使用Spring 的统一异常处理机制,所有其他异常都抛出异常。

public void queryUser()抛出异常{}@RestControllerAdvicepublic类GlobalExceptionHandler{@ExceptionHandler()公共Rsp handleDefaultException(异常异常){ if(的异常实例http requestmethodnotsupportedexception){(在get,post之前不支持此请求模式)}}

这里的一个目的是在顶层处理业务逻辑的异常。这个规则是为了明确异常(可以定义异常来明确),尽早抛出异常,延迟捕捉异常。

Java的throw exception是啥意思?

在Java中通常有两种处理异常的方法。一种方法是抛出exception,也就是说,当这段代码出错时,您不会 不要自己处理,把它留给打的人。

第二种是用try catch来处理,也就是出现问题的时候自己处理。

信息 代码 方法 文件 问题

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。