一、java异常体系:
二、编译时异常和运行时异常的区别:
(一)编译时异常
1. 编译时产生不正常的现象【Exception类和Exception除了Runtimeexception外其他子类】;
2.编译时异常出现必须解决【捕获或声明】;
(二)运行时异常
1.运行异常可以不作处理;
2..RuntimeException类和RuntimeException的子类【运行时才会产生的不正常现象】;
两种异常的处理:
三、异常的处理方式
(一)捕获处理
1. try catch
格式:
try{
可能出现异常的代码
} catch(异常类型 变量){
处理具体异常
}
代码演示:
public class ExceptionDemo {
public static void main(String[] args) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream("Item/mm/miao/tt.txt");
fos.write("这是我们捕获的异常,采用try--catch解决!".getBytes());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
注意:
1.如果出现多个异常,需要准备多种异常情况的处理机制,可以加多个catch块;
2.多个catch的异常处理类型如果有子父类继承关系时--子类必须在前,父类在后;
2.try catch finally
在我们处理异常的时候不管异常发生与否都必须要执行的代码段,可以放到finally里中
注意:finally不能单独使用
(二)声明异常
遇到异常自己不做具体的处理,这时可以使用关键字throws把异常的类型抛出去,声明给下一个使用该方法的元素。
具体做法: 在方法的参数列表后使用throws + 异常的类型。
public class ExceptionDemo {
public static void main(String[] args) throws FileNotFoundException/*这里就是抛出的一个异常*/{
FileOutputStream fos = new FileOutputStream("Item/mm/miao/tt.txt");
}
}
三、throw和throws的区别
throws | throw |
方法【参数列表】后面,跟的是异常类名 | 方法体内,跟的是异常对象 |
表示声明异常,调用该方法有可能 会出现这样的异常 | 表示手动抛出异常对象,只要执行 就必然有异常抛出 |
处理异常类型 | 产生异常对象 |
五、JVM默认处理异常的方式
- 、在代码中如果出现不正常的异常情况,就将其封装到一个异常对象中;
- 、将异常对象抛给调用该方法的方法;
- 、某个方法接收到底层方法抛上来的异常,没办法自己处理,就继续向上抛出,最终抛给主方法,主方法也不做处理,就抛给调用自己的jvm虚拟机;
- 、Jvm虚拟调用main方法时接收到抛过来的异常,首先停止jvm的运行状态同时捕获异常对象将异常对象的所有信息,通过错误流打印出来;
六、Throwable常用方法
1、构造方法
- Throwable():创建一个没有任何信息异常对象
- Throwable(String message):创建一个具有描述异常信息的异常对像
- Throwable(Throwable t):创建一个具有异常原因信息的异常对象
2、常用方法
public String getMessage() :返回此 throwable 的详细消息字符串
public String toString() :返回此可抛出的简短描述【对象的名称 原因 描述信息】
public void printStackTrace() :把异常的错误栈轨迹信息输出在控制台
public Throwable getCause( ) :获取异常对象的产生原因