异常,为我们处理非正常的业务流程提供了很好的解决方案,如果你有过dbase、c、pascal等过程式语言开发的经历,你一定会深刻体会到,异常机制给你的代码可读行、可维护性带来的好处,同时,程序的健壮性也得到了增强。
在 java项目中,异常设计要注意下面的几点。
一、自定义异常父类的选择
A、自定义异常的父类,可以选择为RuntimeException或Exception。RuntimeException是运行时异常,你可以选择它
来做为你的异常父类,因为这种异常不受到编译器检查,因此,给予了程序员很大的灵活性,程序员可以处理这种异常,也可以不处理(实际上并不是不处理,而是
不立即处理,等到一个合适的地方再进行处理)。选择RuntimeException作为父类,是很多框架常采用的,如果你是做底层框架的,可以选择
RuntimeException。
B、业务层异常,一般选择Exception作为父类,因为业务层异常比较重要,一般都是要由调用者进行处理或者是要告知调用者会发生这种异常。如果你的
代码是提供给第三方厂商用的,业务层封闭统一的异常就显得非常的有必要。这类异常会强制要求程序员进行处理(异常转译或继续声明抛出),程序完整性、健壮
性得到了加强。
二、业务层自定义异常结构的设计
A、业务层自定义异常可以考虑按子系统来划分,也就是说,每一个子系统(模块)都有自己的异常定义,每个子系统自己维护自己的,统一向调用者抛出。
B、根据业务类型,从逻辑上划分异常类型,比如:权限相关的,安全相关的,数据库相关的等等。
总的来说,这两种自定义异常也可以混合使用,因为有的时候,子系统(业务模块)本身就是从逻辑上进行划分的。
三、异常结构定义
异常类的父类选定后,再定义自己的异常结构。一般的异常类中,要定义这么一些东西。
A、描述字符串,说明异常的起因,或说明等。
B、异常码。定义一个int或String类型的异常码,异常码在整个系统中统一定义,根据异常继承结构,异常码也可以定义得有层次结构。异常码在大的系统中比较常见,Oracle ,Sqlserver等数据库产品中,或华为、中兴的一些驱动api中。
C、定义一个Throwable的成员变量,用以封装异常结构链。
D、定义无参数、有参数(String,Throwable)的构造方法。
四、在WEB三层模型中,异常的处理
在经典的三层架构模型中,通常都是这样来进行异常处理的:
A、持久层一般抛出的是RuntiomeException类型的异常,一般不处理,直接向上抛出。
B、业务层一般要封装自定义异常,统一向外抛出(这里要注意,如果用spring在业务层管理异常,一定要配置好异常回滚类型,因为spring默认只回
滚RuntiomeException类型的)。我也见过一些想省事的人,业务层也不定义任何异常,也不进行try
catch,如果业务层出现异常将在表现层进行处理及页面跳转。
C、表现层必须要处理业务层的异常,以正确向客户报告系统出现的问题,这里面是最后一道异常处理的地方。我也见过有懒人在业务层都不处理,直接在web.xml中配置errorPage的,但不建议这么做。
用好异常,对于项目的可维护性、健壮性都有极大的好处,当然,异常也不是万能的,在有些项目中并不适用,比如:纯算法项目,对性能要求极高的项目等,因为
异常栈会对系统性能有一定开销,在这些项目中,最后还在老老实实用方法的返回值去标识方法执行的结果,用if else去处理业务逻辑中的非正常情况吧。
分享到:
相关推荐
### Java异常总结 #### 一、Java异常概述 在Java编程语言中,异常处理机制是一项非常重要的特性...掌握Java中的异常处理机制,并结合实际项目需求合理地运用各种异常处理技巧,是每一个Java开发者都需要具备的能力。
在"接口设计项目设计及具体实现"这个项目中,我们可以深入理解接口设计的重要性以及如何将其应用于实际项目中。 首先,接口设计的目标是定义明确、规范的交互方式,确保不同的软件模块能够无缝协作。在项目中,你...
在Java EE项目中,为了实现统一的异常处理,通常会设计一个异常处理框架。这个框架可能包括全局的异常拦截器,用于捕获未处理的异常,然后根据异常类型和业务需求进行处理,如记录日志、向用户显示友好的错误信息,...
总结起来,Struts1的异常处理机制通过Action类内的捕获、`Struts-config.xml`配置以及Interceptor实现,确保了应用程序的健壮性和用户友好性。在维护和升级Struts1项目时,理解这些机制对于问题定位和修复至关重要。
整个项目在开发过程中,还需要考虑异常处理、日志记录、性能优化等方面。例如,使用try-catch-finally语句处理可能出现的运行时异常,通过Log4j等工具记录系统日志,便于后期排查问题。另外,通过合理的数据库设计和...
项目开发总结报告是项目开发过程中的重要文档,用于记录项目的全过程,包括开发、设计、测试和维护等各个环节的总结,以便于团队回顾经验,找出不足,为后续项目提供参考。以下是对报告各部分的详细说明: 1. **...
全局异常处理是软件开发中的一个重要概念,特别是在大型项目或复杂系统中,确保程序在遇到错误时能够优雅地处理并提供反馈至关重要。这篇文章将深入探讨全局异常处理的实现,包括其重要性、常见方法以及如何在不同...
总结来说,Spring Boot项目中的异常拦截设计和处理是通过区分异常类型、规范处理流程以及选择合适的拦截方案来实现的。推荐使用`@ControllerAdvice`结合`ErrorController`,因为这种方法既保留了Spring Boot的约定,...
在本项目中,我们面临的是一个对日的外包项目,其设计文档包含了详细设计、界面设计和SQL语句等关键内容。这样的文档是确保软件开发过程中各阶段有序进行的重要参考资料,对于理解和实施该项目至关重要。 首先,...
本文将详细探讨软件工程中的六种关键文档:概要设计说明书、可行性研究报告、软件需求说明书、详细设计说明书、项目开发计划以及项目开发总结报告。 1. **概要设计说明书**: 概要设计说明书是软件架构和主要模块...
总结起来,Java Web项目的整体异常处理机制应包括以下几个关键点: 1. 在Action、Service和DAO层使用try-catch块,捕获异常并抛出自定义异常。 2. 使用日志工具记录异常信息,便于排查问题。 3. 设计并实现异常拦截...
综上所述,这个网上订餐项目涵盖了WPF应用开发的多个方面,从UI设计到业务逻辑实现,再到数据库交互和支付集成,全面展示了C#语言与MVVM模式在实际项目中的应用。通过深入理解并实践这些知识点,开发者能够构建出...
在测试中,可能遇到如系统崩溃、数据丢失、支付异常等问题,通过定位问题、修复代码、调整配置等方式逐一解决。 2.6 收获与感想 项目结束后,对测试流程有了更深入的理解,提高了问题解决能力,同时也意识到持续...
2017年下半年的软件设计师考试上午题知识点总结中,可能会包含以下关键点: 1. 计算机基础知识:包括计算机系统组成、数据表示、存储器层次结构等。 2. 软件工程理论:需求分析、设计原则、版本控制、项目管理等。 ...
在早期的编程语言中,如C语言,异常通常是通过`if...else...`结构来手动检查和处理的,这种方式虽然直观,但对于大型项目来说显得非常繁琐且难以维护。随着Java语言的诞生及其不断发展,它引入了一套更加系统化和...
在C#期末课程设计的总结中,我们涵盖了多个关键知识点,这些都是C#编程语言的核心要素,也是进行实际项目开发的基础。以下是对这些知识点的详细解释: 1. **基础语法**:C#是一种面向对象的编程语言,其语法结构...
在编程世界中,C# 和 C++ 是两种广泛使用的编程语言,它们各有特色,但也有交互的地方。在本文中,我们将深入探讨如何在C#环境中捕获源自C/...在实际项目中,确保正确处理各种异常情况,可以极大地提高软件的可靠性。
总结SSM项目时,除了上述技术要点,还要关注项目结构的合理性、代码规范的遵循、异常处理的完善以及性能优化等方面。在实际开发中,应注重模块化设计,确保代码的可读性和可扩展性,同时结合单元测试和持续集成,...