一.异常概述
1.异常就是程序在执行过程中遇到的不正常现象
2.异常分为错误(error)和异常(exception)
3.错误不是程序造成的,是一些不可抗拒因素造成的
4.异常又分为运行异常和编译异常(即程序运行时异常和程序编译时异常)
程序运行异常一般是因为程序写的不严谨造成的,一般需要你去修改代码
编译时异常必须处理,否则会造成程序编译不通过,程序无法运行.
二.异常的继承体系
任何一个异常都有一个类与它对应.
Java程序中将exception的直接子类叫做编译时异常,将RuntimeException的子类叫做运行时异常
RuntimeException:ArithmeticException:数学异常 如:1/0
IndexOutOfBoundsException;数组下标越界异常 int[]arr=new int[2] ,arr[3]
NullPointerException:空指针异常
ClassCastException:类转换异常 Cat cat=new Cat(dog)
编译时异常:
IOexception :IO异常
三.异常的处理
1.方式一:
“`
try {
//可能会发生异常的代码
} catch (Exception e) {
//负责对异常进行处理
}finally{
}
比如: int a=1;
int b=0;
try {
System.out.println(a/b);//new ArithmeticException();
//Exception e=new ArithmeticException();只要有一个引用能接收这个对象,我们就认为异常被处理了
} catch (Exception e) {
// } catch (NullPointerException e) { //无法接收对象所以继续报异常
System.out.println(“异常被处理了”);
}
}
}
当try中第一行代码发生异常其他代码将不再执行
不管异常有木有发生,finally 中的代码总会执行.开发中一般用来写释放资源的代码,(关闭流,关闭数据库等),哪怕是方法中前面有return,也会执行finally中的语句.但是System.exit(0)将JVM退出,finally中的代码就不会执行了.
2.方式二:throws
(1)如果方法的右上角加throws表示该方法可能会发生异常
(2)一旦该方法发生异常,该方法会自动向外抛出一个异常对象
(3)调用者有两种处理方法:
1:try catch;调用者处理了方法抛出的异常
2.如果调用者也处理不了,则继续抛—–>main方法——–>jvm——->直接终止程序
(4)手动抛出异常 throw new exception();
(5)throw和throws的区别
1.throw是真实的手动抛出异常
2.throws是声明该方法可能会发生异常
(6)父子间异常:a.父类没有抛异常,子类一定不能抛异常
b.父类抛异常,子类抛的的异常不能比父类更大
(7)接口没有抛异常,实现接口的类也一定不能抛异常
四.自定义异常
1.继承异常
2.在类中写无参构造和有参构造
3.手动抛异常 throw new 自定义异常