sqlexception是什么异常_常见的异常 和 两种分类方式,一是从程序员的角度,二是根据API...

异常的分类

  • 在Java API中,每一种异常都使用相应的类来进行定义所有异常类的根类是Throwable,该类在java.lang包中。
  • 所有的Java异常类都直接或间接地从Throwable类继承。
  • 可以通过继承Exception类Exception的某个子类来创建自己的异常类。

异常有两种分类方法

一、根据JAVA API 的角度

  • 分为错误异常

二、根据编程开发的角度

  • 分为 检查异常(unchecked exception) 必检异常(checked exception)

错误 与 异常

  • 错误是由Java虚拟机抛出的,其对应的类是Error类

Error类描述的是内部系统错误,这样的错误很少发生。如果发生了Error,一般除了通知用户以及尽量稳妥地终止程序之外,其它几乎什么也做不了

常见的Error

  • Java内存溢出 OutOfMemoryError。
  • 程序中有死循环或方法的无限递归调用 StackOverflowError(堆栈溢出错误)
d78b8b82f30e4c7bd4f9054cd8ad511b.png
  • 异常是用Exception类表示的

它描述的是由程序和外部环境所引起的错误,这些错误能够被程序捕获和处理

  • Exception类有一个重要的子类,就是RuntimeException类
  • RuntimeException类通常是由Java虚拟机抛出的。
  • 常见的RuntimeException

1.空指针异常 NullPointerException

2.数组下标越界异常 ArrayIndexOutOfBoundsException

3.数学运算中除以0的情况 ArithmeticException

4.传递给方法的参数非法或不合适 IllegalArgumentException

  • 常见的异常

1.试图使用一个不存在的类 ClassNotFoundException

2.读取文件时产生的异常 IOException

3.访问关系数据库类产生的异常 SQLException


非检查异常(unchecked exception) 和 必检异常(checked exception)

  • 所有的Error、RuntimeException及其子类都属于 unchecked exception 非检查异常
  • 其他异常属于 checked exception 必检异常
checked exception 必检异常的含义是可能产生这些类型异常的代码 必须采用try‐catch结构进行异常处理,或者 在方法头部中使用throws关键字进行声明。而unchecked exception 非检查异常 不需要try-catch,也不需要throws

如:使用数组时,对可能会产生的数组下标越界异常超大数组分配失败导致的内存溢出错误,编程时都不需要额外进行处理。

因为 下标越界ArrayIndexOutOfBoundsException属于RuntimeException,而内存溢出OutOfMemoryError则属于Error。

非检查异常与必检异常对编程的影响

以访问关系数据库的Java程序为例

  • 如果用传统的 JDBC 技术来访问关系数据库,产生的异常是 SQLException

该类在 java.sql 包中。该异常类属于 checked exception,因此编程时,一般必须明确使用 try‐catch‐finally 结构来处理该异常

在有些情况下,进行异常处理的代码行数甚至会超过完成具体功能本身的代码行数

  • 如果使用某种ORM框架,如Hibernate框架
  1. 在Hibernate框架中,定义了数量众多的数据库访问异常类,这些异常类构成了Hibernate框架的异常体系
  2. Hibernate异常体系中的异常类都是从HibernateException类继承得到的,该类在org.hibernate包中。该异常类的父类是PersistenceException,该类在 javax.persistence 包中,该类的直接父类就是 RuntimeException
  3. 因此,Hibernate异常体系中的异常类和 SQLException 类不同,他们都属于 unchecked exception,因此,不需要必须使用 try‐catch 结构来进行异常处理
  • 如果使用现在火热的Spring框架
  1. 在使用Spring框架访问关系数据库时,抛出的异常都是与特定技术无关的DataAccessException类的子类,该异常类在org.springframework.dao包中。
  2. DataAccessException类RuntimeException类的子类,属于unchecked exception,因此,也不需要必须使用 try‐catch 结构处理或使用 throws 进行声明

从上面可以看出

  • 在传统的 JDBC 技术中,由于SQLException类属于checked exception,因此一般都需要使用 try‐catch 进行异常处理
  • 而使用 Hibernate 或者 Spring框架时,由于 HibernateException 和DataAccessException都属于 unchecked exception,因此不需要使用 try‐catch 进行异常处理,这大大简化了代码的编写工作,提高了编程效率,所得到的代码也更加简洁优美

总结

  • 从Java API的角度来看,主要分为Error和Exception两大类
  • Exception类有一个非常重要的子类,就是RuntimeException。
  • 从编程的角度来看
  • 开发人员更加关注某种异常类是属于unchecked exception还是属于checked exception,后者需要明确使用try‐catch结构来进行处理,而前者则不需要。
52eaef3a4d849ded58a1adf9e6626924.png
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值