JAVA业务系统异常抛出的总结
JAVA 做web开发的过程中,什么时候该抛出异常,什么时候不该抛出异常,我想大家都有自己的想法和意见,下面是我的总结,欢迎大家批评指正。
第一种场景:
如果你的系统需要展现一个列表,并且列表中包含了统计数据列。
如下图所示:
网站ID | 网站名称 | URL | 月展现PV |
123 | 服装 | ...... | 500万 |
其中:
网站ID,网站名称,URL 这3列数据数据网站基本信息,他们是来自一张网站信息表的。
月展现PV 是网站的扩展信息,他来自一张网站PV日志报表的。
这两张表不在一个数据库里面,所以无法进行关联查询。
所以为了展现整个列表的目的,一种方法是我们需要执行两次查询,然后把两次查询的结果合并在一个结果集里面进行返回,最后前端的页面再进行展现。
那么如果我们采用两次查询,再组装成一个结果集来返回的话,那么问题就出现了:
1、如果在第一次查询网站的基本信息表时,服务失败了,那么我们是应该抛出异常提示用户系统出现异常同时展现一个空的列表给用户呢,还是说不给出提示用户‘系统异常’ 的信息,而是直接给用户一个空的列表。
2、如果第二次查询网站的扩展报表数据时,服务失败了,那么我们是应该抛出异常,显示空的列表,并且给出提示呢,还是说列表中的其他列正常的显示出来,只是空出 ‘月展现PV’ 列,应为查询月展现PV的服务出现了异常,但是异常没有被抛出,只是空了此列。
方案:
1、如果你的系统是像银行这些实时要求比较高的系统,那么无论出现上面问题的任何一个问题,都应该抛出异常,并且在页面是提示用户你的系统出现了故障,并且显示一个空的列表给客户。
2、如果你的系统用户的要求不是很严格,那么第一次查询基本信息失败时最好也是抛出异常,给出提示。
3、在系统用户要求不严格的情况下,但是如果是第二次查询出了问题,那么你可以选择只展现第一次查询的基本信息列,而空去出错的列,然后给出用户一些提示,或者不给。而不是抛出异常导致整个列表都不能正常的现实出来。
总之在查询操作时,你可以选择性的抛出异常。
JAVA异常的抛出和捕获处理需要系统付出很大的代价,所以根据的你的情况选择性的抛出异常,不要抛出不必要的异常。第二次的查询失败就是可以不抛出异常的情况。
第二中场景:
在做更新操作时,因为涉及到事务以及数据的回滚,而我们目前流行的JAVA构建回滚事务的前提就是以异常为判断的,所以为了保证事务的有效性,我们最好的我们的代码中你遇到失败问题是就抛出异常,一次保证事务性。
相关推荐
例如,你可能会在业务逻辑层创建自定义异常,然后在该层的代码中抛出这些异常,以便在更上层的控制器或服务中进行捕获和处理。这有助于保持代码的清晰性和模块化。 异常处理的其他关键概念包括异常捕获(使用`try-...
本篇文章将深入探讨如何在Java中实现异常的抛出和处理。 首先,我们需要了解Java中的异常体系。Java中的所有异常都是`java.lang.Throwable`类的子类,包括`Error`和`Exception`两大类。`Error`通常表示系统级别的...
`throw`关键字是Java中用于显式抛出异常的关键字。本实例将深入探讨如何使用`throw`来创建和处理自定义异常,以及它在实际编程中的应用。 首先,我们了解异常的基本概念。在Java中,异常是程序执行过程中遇到的不...
当一个方法抛出一个异常时,它可以将另一个异常作为原因传递给新的异常对象。这样做的好处是可以保留原始异常的信息,便于调试和分析问题根源。 #### 六、Struts框架中的异常处理 Struts框架是一个基于MVC模式的...
通过以上内容,我们可以看到Java异常处理中的throw关键字用于手动抛出异常对象,这在处理不符合业务逻辑或预期情况时非常有用。理解并熟练运用异常处理机制,可以显著提升程序的稳定性和可靠性。
3. **throw**:用于抛出自定义的异常或Java预定义的异常。 4. **throws**:用于声明方法可能抛出的异常,这样调用者可以选择是否进一步处理这些异常。 5. **finally**:无论是否发生异常,finally块中的代码都会...
5. **异常分类**:区分业务逻辑异常和系统异常,业务异常可以转化为返回值,而系统异常则需要通过异常机制处理。 6. **异常处理策略**:对于可恢复的异常,可以在捕获后尝试恢复;对于不可恢复的异常,考虑终止程序...
本项目“业务异常提示处理 springboot+Assert(自定义断言)”着重于利用Spring Boot的特性来构建高效、易维护的业务逻辑,并通过自定义断言提升代码的可读性和可维护性。下面我们将详细探讨这些知识点。 1. **Spring...
在实际应用中,`ExceptionMapper`的实现可以捕获并转换业务逻辑层抛出的异常,确保REST API返回符合规范的HTTP响应。例如,如果一个资源未找到,`ExceptionMapper`可以捕获`FileNotFoundException`并返回HTTP 404...
2. **异常抛出** - 使用`throw`关键字显式抛出异常。 - 示例:`throw new IllegalArgumentException("Invalid argument");` #### 七、异常处理策略 1. **异常处理的顺序** - `catch`块按照声明顺序依次尝试捕获...
系统定义异常是由Java运行时环境自动抛出的,通常对应于编程中的常见错误,如数组越界(ArrayIndexOutOfBoundsException)、空指针异常(NullPointerException)等。这些异常是直接或间接继承自`java.lang.Exception...
try块包含可能抛出异常的代码,catch块用于捕获并处理特定类型的异常,finally块则确保无论是否发生异常,某些代码(如资源释放)总能得到执行。 2. 自定义异常:当遇到特定业务场景下的异常情况,可以创建自定义...
创建自定义异常时,我们通常会为特定的错误或业务规则定义一个新的异常类,以便在代码中抛出并捕获。 例如,假设我们在一个银行应用程序中,需要处理存款金额小于零的情况。我们可以创建一个名为`...
此外,`throws`关键字可以在方法签名中使用,将异常声明为方法可能抛出的,这样调用者就需要处理这些异常,而不是让它们在当前作用域内传播。 总之,Java的异常处理机制是一种强大的工具,可以帮助我们编写健壮、可...
运行时异常通常由程序逻辑错误引起,如除零错误、空指针引用等,它们在程序运行时才会被抛出。编译时异常则是必须在编译阶段就进行处理的异常,例如FileNotFoundException、IOException等,如果不捕获或声明,程序将...
总之,Java异常处理是通过面向对象的方式进行的,包括抛出异常、捕获异常和最终的异常处理。理解和熟练掌握异常处理是编写健壮、易维护的Java程序的关键。通过合理使用异常处理机制,开发者可以提高代码的稳定性和...
在Java编程语言中,异常处理是一项关键特性,用于处理程序运行时可能出现的错误或不正常情况。...通过理解异常的继承体系,编写自定义异常类,以及正确地抛出和处理异常,我们可以构建更加健壮和易用的Java应用程序。
4. **异常链**:当一个异常在处理另一个异常的过程中被抛出,可以形成异常链,提供更详细的错误信息。 5. **自定义异常**:开发者可以通过继承`Exception`或其子类来创建自定义异常,以适应特定业务场景。 6. **多...
当异常发生时,Java会抛出(throw)这个异常对象,然后程序可以选择捕获(catch)并处理这个异常,或者让异常继续传播。 Java异常处理主要包括五个关键字:try、catch、finally、throw和throws。它们共同构成了异常...