异常处理

Spring3 Mybatis 异常处理

浪子不回头ぞ 提交于 2020-04-07 05:59:15
Spring3 Mybatis 异常处理 通常在 Dao 层将所有异常都转嫁到 Spring 的 RuntimeException 体系中来 -DataAccessException Spring的DAO框架没有抛出与特定技术相关的异常,例如SQLException或HibernateException,抛出的异常都是 与特定技术无关的org.springframework.dao.DataAccessException类的子类,避免系统与某种特殊的持久层实现耦 合在一起。DataAccessException是RuntimeException,是一个无须检测的异常,不要求代码去处理这类异常,遵循了 Spring的一般理念:异常检测会使代码到处是不相关的catch或throws语句,使代码杂乱无章;并且 NestedRuntimeException的子类,是可以通过NestedRuntimeException的getCause()方法获得导致该异 常的另一个异常。Spring的异常分类有 Spring的DAO异常层次 异常 何时抛出 CleanupFailureDataAccessException 一项操作成功地执行,但在释放数据库资源时发生异常(例如,关闭一个Connection) DataAccessResourceFailureException 数据访问资源彻底失败

9.5 异常处理规则

自作多情 提交于 2020-04-05 17:12:15
目录 一、不要过度使用异常 二、不要使用过于庞大的try块 三、避免使用Catch All语句 四、不要忽略捕获到的异常 成功的异常处理应该实现如下4个目标 1、使程序代码混乱最小化 2、捕获并保留诊断信息 3、通知合适的人员 4、采用合适的方式结束异常活动 一、不要过度使用异常 过度使用异常主要有两个方面: 1、把异常和普通错误混淆在一起,不在编写任何错误处理代码,而是以简单地抛出异常来代替所有的错误处理。 2、使用异常处理代替流程控制。 对于完全已知的错误,应该编写处理这种错误的代码,增加程序的健壮性;对于普通错误,应该编写处理这种错误的代码,增加程序的健壮性。只有对于外部的、不能确定和预知的运行错误才使用异常。 比如五子棋游戏,处理用户输入坐标点已有棋子的两种方式: //如果用户试图下棋的坐标点已有棋子 if(!gb.board[xpos-1][ypos-1].quales("+")) { System.out.println("你输入的坐标点已有棋子了,请重新输入:"); continue; } 上面的处理方式检查用户试图下棋点已有棋子,立即打印一条提示语句,并重新开始下一次循环。这种处理方式简单明了,逻辑清晰。 如果将上面的机制改成如下方式: //如果用户试图下棋的坐标点已有棋子,程序自行抛出异常 if(!gb.board[xpos-1][ypos-1].quales("

final, finally, finalize的区别

元气小坏坏 提交于 2020-04-05 15:01:46
(1)final:修饰符。 A).如果一个类被声明为final,就意味着它不能再派生出新的子类,不能作为父类被继承。 B).如果将变量或者方法声明为final,可以保证它们在使用中不被改变。 C).被声明final的方法只能使用,不能重写。 (2)finally:异常处理机制的一部分 A).finally结构使代码总会执行,而不管是否有异常。 B).使用finally常用于释放资源。 (3)finalize:Java中垃圾回收器执行的方法。 A).它是一个方法,属于java.lang.Object类。 B).在垃圾收集器执行的时候会调用的此方法,进行对象的回收,但在调用垃圾回收gc()后,并不能立即执行回收,JVM根据算法定时执行。 来源: oschina 链接: https://my.oschina.net/ilovejava/blog/3217265

异常体系

随声附和 提交于 2020-04-02 11:17:42
异常的概述 Exception,在程序中能够强制编译器来处理程序执行中的发 生的并不是由程序本身所造成的错误。这个处理方法在java中就叫做异常捕获, 而这些并不是程序本身产生的错误就叫做“异常”。 基本异常 举一个抛出异常的简单样例,对于对像引用f,传给你的时候可能没有初始化。 那么在使用这个对象调用其方法前能够先对它进行检查。像这样: if(f==null) throws new NullPointerException(); 这就是抛出了一个异常,那么在当前环境下就不必操心这个可能出现的空指针异常了。 它将在别的地方获得处理。 使用异常处理机制的优点就是异常同意我们强制程序停止执行。 并告诉我们出现了什么问题。或者强制程序处理问题,并返回稳定状态。 异常处理程序 假设要将抛出的异常进行恰当的处理,就得准备对应的处理程序。 异常处理程序紧跟在try代码块之后,以keywordcatch表示: try{ //要尝试执行的代码 }catch(){ //处理该异常的代码 } (关于catch语句的异常类型:假设是catch语句的异常类型是CapacityToolException的父类, 那么程序也回进入到catch语句中。) 创建自己定义异常 java中不可能将全部的异常考虑的面面俱到。 所以有必要通过自己写的异常类来处理各种可能出现的异常, 要定义异常类。必须从已有的异常类中继承

30.Java异常处理

假装没事ソ 提交于 2020-03-30 16:37:16
一、异常概述与异常体系结构 1.异常概述   在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如: 客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅 等等。 1.1异常的定义   在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常) 1.2异常的分类 Error :Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性的代码进行处理。 Exception : 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:    > 空指针访问   > 试图读取不存在的文件   > 网络连接中断   > 数组角标越界 1.3说明   捕获异常最好的时间是在编译期,但有些异常是在运行期才能发现。比如:数组角标越界、除数为0的情况。 2.异常体系结构 * java.lang.Throwable * |-----java.lang.Error:一般不编写针对性的代码进行处理。 * |-----java.lang.Exception:可以进行异常的处理 * |------编译时异常(checked) * |----

8.异常处理(未完)

[亡魂溺海] 提交于 2020-03-29 17:11:56
8.1.1栈展开 抛出异常时,将暂停当前函数的执行,开始查找匹配的catch子句。首先检查throw本身是否在try块内部,如果是,检查与该try相关的catch子句,看是否可以处理该异常。如果不能处理,就退出当前函数,并且释放当前函数的内存并销毁局部对象,继续到上层的调用函数中查找,直到找到一个可以处理该异常的catch。这个过程称为栈展开(stack unwinding)。当处理该异常的catch结束之后,紧接着该catch之后的点继续执行。当找不到匹配的catch时,程序将调用标准库函数terminate,负责终止程序的执行过程。 8.1.2析构函数能抛出异常吗? 不能, (1) 如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。 (2) 通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。 8.1.3异常对象和查找匹配的处理代码 异常对象使用异常抛出表达式来对异常对象进行拷贝初始化,因此throw语句中的表达式必须拥有完全类型,如果是类类型还必须拥有一个可访问的析构函数和拷贝或者移动构造函数。 异常的类型混合catch声明的类型匹配: (1

PDO基础应用之异常处理

◇◆丶佛笑我妖孽 提交于 2020-03-29 13:32:41
思考:PDOException可以捕捉到异常,也有其他模式,那么在实际开发的时候我们到底是使用PDO的那种错误模式呢? 引入:其实PDO之所以提供了这么多模式,就是要使用人员根据实际情况来选择模式,如果一个项目中,需要我们去控制项目bug,那么就适合使用异常模式来进行处理 PDOException异常处理【掌握】 定义:PDOException 是PDO从Excetion继承的一个用于处理PDO错误的异常类,一般如果做一套扩展,都会从Exception类继承实现一套明确的错误机制(错误来自哪里) 1.要使用PDOException异常处理,需要设定PDO的错误模式为异常模式,在PDO中可以通过两种模式来实现异常模式设定 在初始化PDO对象的时候,利用第四个参数来设定 在初始化PDO之后,利用PDO::setAttrinute()方法来修改错误模式 <?php //初始化PDO时设定错误模式 $drivers=array( PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCPTION ); $link=new PDO('mysql:host=localhost;port=3306;dbname=senven;charset=utf8','root','root',$drivers); //初始化之后设置异常模式 $pdo=new PDO('mysql:host

SpringMVC中的异常处理

别说谁变了你拦得住时间么 提交于 2020-03-29 06:26:10
  springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。 1. 异常处理思路   系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。   系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图: 2. 自定义异常   为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。(自定义异常继承Exception类) package cn.rodge.ssm.exception; public class CustomerException extends Exception { private static final long serialVersionUID = -3387516993124229948L; private String expMessage; public String getExpMessage() { return expMessage; }

SpringMVC异常处理

末鹿安然 提交于 2020-03-29 06:25:53
1.1. 异常处理思路 系统中异常包括两类:预期异常和运行时异常 RuntimeException ,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。 系统的 dao 、 service 、 controller 出现都通过 throws Exception 向上抛出,最后由 springmvc 前端控制器交由异常处理器进行异常处理,如下图: ------------------------------------------------------------------------------------------------------------------------ /** * 异常处理器的自定义的实现类 * @author lx * */ public class CustomExceptionResolver implements HandlerExceptionResolver{ public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj, Exception e) { // TODO Auto-generated method stub 发生异常的地方