今日重点:
目录
(7)throws 关键字和 throw 关键字在使用上的几点区别如下:
一、异常处理
1、异常处理的概念
异常是代码在编译或者执行的过程中可能出现的错误。学习异常处理的目的是为了避免异常的出现,同时处理可能出现的异常让代码更加完善实用。异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
异常发生的原因有很多,通常包含以下几大类:
- 用户输入了非法数据。
- 要打开的文件不存在。
- 网络通信时连接中断,或者JVM内存溢出。
这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。-
2、 异常的继承体系结构
(1)Error
①系统级别问题,JVM退出等,代码无法控制。代码正常情况下,不太可能出现的。绝大多数Error都会导致程序处于非正常的状态下,很难恢复,外力作用下,不考虑。Error是Throwable的子类,它是在Java程序处理范围1之外的。
(2)Exception:
Java语言中,将程序执行中发生的不正常的情况称之为异常,java.lang包下,成为异常类,它表示程序本身可以处理的问题。
(3)RuntimeException及其子类:
运行时异常,编译阶段不会报错。比如空指针异常,数组索引越界异常
(4)除了RuntimeException之外所有的异常:
编译时异常,编译期必须处理的,否则程序不能通过编译。比如日期格式化异常
3、编译期异常和运行期异常
(1)编译期异常:
没有继承RuntimeException的异常,继承自Exception的异常或者其子类。编译阶段就会报错。写代码的时候,抛异常。就算代码没有出错,但是结果就会提示有异常。是Java系统担心程序员的技术不行,在编译阶段就爆出一 个个错误, 目的在 于善意提醒,提醒程序员这里很可能出错,请检查并注意不要出bug,编译时异常是可遇不可求。如果编译器不解决,会编译不通过,会一直报错。
(2)运行期异常:
继承RuntimeException的异常或其子类,编译阶段不报错,运行时可能会抛出异常。运行期异常一般是程序员业务没有考虑好或者是编程逻辑不严谨引起的程序错误。
运行时异常示例
●数组索引越界异常: ArrayIndexOutOfBoundsException
●空指针异常 : NullPointerException,直接输出没有问题,但是调用空指针的变量的功能就会报错。
●数学操作异常: ArithmeticException
●类型转换异常: ClassCastException
●数字转换异常 : NumberFormatException(3)其他会出错的情况
①除数为0
②IO流,没有关闭
电脑会容易蓝屏
③停电
数据没来得及保存就停电就会流失
4、异常处理机制
当一个程序抛出异常(发生错误)时,抛出异常后面的语句不再执行,类似于return的功能
(1)异常默认处理机制
①默认会在出现异常的代码那里自