一、异常:写代码时出现的编译或者运行的错误
异常包含了错误的类型、原因以及位置
异常的体系结构:
Throwable()(最顶层)
Error:出现的不能够处理的严重问题
Exception:可以处理的问题
二、异常处理
1.jvm处理异常的方式:
如果出现异常没有处理,jvm会帮我们处理,会把异常的类型、原因、位置显示在命令行,并且终止程序,异常后面的代码将不在执行
2.异常处理的方式:
(1)捕获处理
try...catch...语句
try{
有可能出现问题的代码
}catch(异常对象){
处理异常
}
执行顺序:首先执行try语句,如果发现异常,异常下面的代码不在执行,直接跳入catch语句中
try{
System.out.println(1);
System.out.println(2/i);
System.out.println(2);
}catch(异常对象){
System.out.println("0不能为除数");
}
System.out.println(3);
如果i = 0,输出 1
0不能为除数
3
如果i!=0,输出 1
2
3
(2)抛出异常
当不想处理异常或没有能力处理时,可以选择抛出异常,谁调用方法谁处理异常,使用关键字throws在方法的声明处抛出异常
jvm调用主方法时会处理抛出的异常
3.如何处理多个异常
(1)可以使用多个try...catch...语句
(2)使用一个try和多个catch
多个catch之间可以有父类
平级之间没有顺序关系
如果有父类,父类异常必须放在后面
三、throwable
常用的方法:;
String getMessage():原因
String toString():类型和原因
void printStackTrace():类型、原因和位置
四、finally
组合try...catch使用,用于释放资源等收尾工作,无论try...catch语句如何执行,finally代码一定会执行
try{
有可能出现问题的代码
}catch(异常对象){
处理异常
}finally{
释放资源
清理垃圾
}
五、异常分类:
1.运行时期异常:RuntimeException的子类就是运行时异常,在编译时期可以选择处理或者不处理
2.编译时期异常:是Exception的子类,非RuntimeException的子类,在编译时期必须处理
3.(1)throws:处理异常的一种方式,把异常抛出,由调用者来处理
(2)throw:制造异常的方式,并且结束方法
注意:如果抛出(throw)的是编译时期异常,必须在方法声明处抛出(throws)
public static void checkSore(int sorce){
if(score < 0 || score > 100){
throw new RuntimeException("考试成绩不符合要求");
}
System.out.println("成绩输入正确");
}
(3)为什么IO流要抛出异常的原因是:
在它的构造抛出了IOException,如果调用它的构造必须抛出异常
六、创建自己的异常
如何自定义一个异常类:
写一个类去继承Exceptioon或者RuntimeException,然后实现多个构造即可
public class MyException extends RuntimeException{
public MyException(){
super();
}
public MyException(String message){
super(message);
}
}
此为运行时期异常
网友评论