【Java SE】异常处理
来源:互联网 发布:模拟软件下载 编辑:程序博客网 时间:2024/05/31 20:52
异常类的继承关系
- 异常的继承树
- Object类的直接子类Throwable描述了所有被虚拟机抛出的非正常状况(一般不用Throwable,而是用其子类Error、Exception)
- Error类:特指应用程序在运行期间发生的严重错误(一般情况下这种错误都是灾难性的,故没必要使用异常处理机制处理)
- Exception类:
- 以RuntimeException为代表的一些类,称为非检查性异常:这种异常在编译时不进行检查,到运行时才会显现
- 以IOException为代表的一些类,称为检查性异常:这种异常必须进行异常处理,否则编译时不能通过
- 还有其他子类,描述其他类型的异常
- Object类的直接子类Throwable描述了所有被虚拟机抛出的非正常状况(一般不用Throwable,而是用其子类Error、Exception)
- 异常类型:检查性异常、非检查性异常
- 异常的继承树
异常处理机制
- 异常的处理过程:抛出异常→捕获异常→处理异常
- 如果程序中有异常,那么抛出异常这行代码后的所有代码将不再执行
- Java中处理异常的两种方式:
- 自行处理:可能引发异常的语句封入在try块内,而处理异常的相应语句则封入在catch块内
- 回避异常:在方法声明中包含throws子句,通知潜在调用者,如果发生了异常,必须由调用者处理
public static void main(String[] args){ int i=0; int[] a={1,2,3,4,5}; try{ while(i<6){ System.out.println(a[i]+" "); i++; } } catch(ArrayIndexOutOfBoundsException e){ System.out.println("ArrayIndexOutOfBoundsException!"); return; } catch(RuntimeException e){ System.out.println("RuntimeException!"); } catch(Exception e){ System.out.println("Exception!"); } finally{ System.out.println("program is running into finally!"); }}
- try...catch语句
- 语法:try{可能发生异常的语句}catch(异常类对象的声明){对异常的处理语句}
- 若try块当中抛出异常,那try块就会夺取程序的运行权,这个异常后的代码将不再运行,try块会将运行权移交给catch块
- catch块:用来捕获并处理try块抛出的异常的代码块,catch块不能离开try块单独存在,一个try块可以有多个catch块以捕获不同类型的异常
- 和特殊异常类相关联的catch()块必须写在和普通异常类相关联的catch()之前
- try{}和catch(){}之间不可以添加任何代码
- 异常处理机制主要处理检查性异常而不是非检查性异常和Error
- 每次try块有异常抛出,系统会试着从上到下往每个catch块中传参,直到遇到一个类型匹配的catch块为止
- 形参为Exception类型的catch块只能放到最后面,否则所有的异常都被它处理了,其他的catch块就不能分门别类的起作用了
- finally语句
- finally语句放在try...catch语句后
- finally语句中的代码块不管异常是否被捕获总是要执行
- 通常在finally语句中可以进行资源的清除操作,如,关闭打开文件、删除临时文件
- 即使try代码块和catch代码块中使用了return语句退出当前方法或使用break跳出某个循环,后面的finally代码块都会执行
- 当try或catch代码块中执行了System.exit(0)时,finally代码块中的内容不被执行
- throws关键字
- 如果一个方法中的语句执行时可能生成某种异常,但是并不能确定如何处理,则可以在程序所在的方法声明后,使用throws关键字抛出异常
class ThrowsDemo{ public void proc() throws IOException{ System.out.println("inside proc"); }}
- throws关键字位于方法参数列表的后面,可以接多个异常,中间用逗号分隔
- throws关键字抛出的异常,由调用该方法的方法处理
- 覆盖方法抛出异常时,可以抛出与被覆盖方法相同的异常,或者被覆盖方法异常的子类异常
- 如果一个方法中的语句执行时可能生成某种异常,但是并不能确定如何处理,则可以在程序所在的方法声明后,使用throws关键字抛出异常
- throw关键字
- 程序可以用throw语句引发明确的异常
- throw语句用在方法体内,表示抛出异常,由方法体内的语句处理
- throw语句不能单独使用,要么和try...catch...一起使用,要么和throws一起使用
- throw语句的操作数一定是Throwable类类型或Throwable子类类型的一个对象
- 异常的处理过程:抛出异常→捕获异常→处理异常
方法调用的堆栈
- 后进先出:方法A调用方法B的时候,只有方法B先完成后,方法A才完成
- 先执行的方法总是后完成,后执行的方法先完成,类似于数据结构中的堆栈,故称为方法调用堆栈
自定义异常
- 如果Java提供的异常类型不能满足程序设计的需要,我们可以定义自己的异常类型
- 用户自定义的异常类应为Exception类(或者Exception类的子类)的子类
0 0
- 【Java SE】异常处理
- Java SE朝花夕拾之异常处理
- Java SE 基础概述(二)异常处理
- Java知识整理(七)之SE.(泛型+异常处理)
- Java SE -- 异常
- Java Se ----异常
- Java SE学习笔记:Java的异常机制和异常的处理
- Java SE之异常机制
- Java SE的异常分类
- java SE基础知识(关于异常)
- Java SE菜鸟之异常
- 【Java SE基础】日期处理
- 【JAVA SE】23.异常(Exception)
- java.se.io.7.缓冲处理流
- java.se.io.10.data处理流
- java.se--异常--java.net.SocketException: Too many open files
- 【java】java异常处理
- java异常和异常处理
- Git版本控制(2)
- Windows7 上运行docker实战
- noi-7543-统计满足条件的4位数个数
- 异步操作校验工具awaitility快速入门
- 关于C++中const关键字总结
- 【Java SE】异常处理
- LeetCode:104_Maximum Depth of Binary Tree | 二叉树的最大深度 | Easy
- Android NDK JNI 简单例子1 : Android NDK配置和下载
- 贝叶斯概率
- 使用maoreduce实现一个超级简单的爬虫功能
- C# 绘制多个控件的边框
- 获取手机通讯录联系人
- [菜鸟笔记--Java的进阶之路三]
- springmvc_mybatis中关于图片上传的写法