目录:
- 运行时异常和检查时异常
- 处理异常
- 自定义异常
1.运行时异常和检查时异常
运行时异常即在运行时异常,即程序运行时抛出的异常。例如:
System.out.println(1/0);
String name=null;
name.length();
检查时异常,又称为非运行时异常,这样的异常必须在编程时进行处理,否则就会编译不通过。
小结: 1.运行时异常类继承自RuntimeException;检查时异常不继承
2.运行时异常,程序不处理仍然可以javac;检查时异常必须进行显式处理
2.处理异常
Java中对异常的处理有如下两种方式:
1.通过try、catch和finally关键字捕获异常
2.通过throw或throws关键字抛出异常
1.try...catch...
try后面可以跟多重catch,但是要注意先子类后父类
即:Exception,RuntimeException必须放在ArithmeticException,NullPointerException这些后面
2.try...finally...
无论try语句块是否异常,finally语句块中代码都会正常执行。例如
try {
System.out.println(1/0);
}finally {
System.out.println("234");
}
最后是可以输出234的
3.throw
throw在方法体中:
throw在代码块中;
如果代码块中抛出的异常对象是由检查时异常创建的,则必须使用try-catch进行处理
4.throws
什么时候使用throws:
1.当方法体中的throw关键字抛出由检查时异常创建的对象时,如果该异常对象在抛出的同时已经通过try-catch进行了处理,则 可以不使用throws,否则必须使用throws抛出创建该对象的异常类或其父类。
2.所调用的方法抛出了检查时异常时,如果该方法在调用的同时已经通过try-catch进行了处理,则可以不使用throws继续上抛 该异常,否则必须使用throws才能上抛该异常,此时上抛的异常类可以是调用方法时方法抛出的异常类也可以是其父类。
关于throw和throws的小结:
1.throw抛出的是异常对象;
throws抛出的是异常类
2.throw 用在方法体;如果用在代码块,则在抛出检查时异常时要先try-catch
throws用在参数列表后面
注意:如果throw 抛出的是检查时异常对象,则必须进行处理(try-catch或者throws)
如果抛出的是运行时异常,则可不用进行显式处理
3.自定义异常
有时我们想通过爆发异常,让人们更直观的明白问题出在哪里
但是空指针异常在这里有些词不达意。这时,为了使之更贴切,我们可以自定义一个AgeException异常