异常类的使用,作用,处理,自定义异常
异常类的作用是为了完善java程序的健壮性,适当地处理异常有利于程序的正常进行。
异常在java中以类的方式存在,每个异常类都可创建对象,在发生异常jvm会自动new对象,并且将new的对象抛出,打印到控制台。
总的来说异常类(exception)的子类有两大类:
直接继承exception的是编译时异常
继承exception的子类runTImeException是运行时的异常
编译时异常是需要我们去处理的
运行时异常可以选择进行处理
对异常的处理包括两种方式:
在方法声明的时候使用throws关键字,抛给上一级
使用try…catch语句进行异常的捕捉
Throws的使用:
因为ClassNotFoundException 是编译时异常(父类是exception,而不是runtimeexception),不进行处理的话就会报错。
(此时main方法没有抛异常或捕捉异常,程序报错)
public static void main(String[] args) {
dosome(); //未进行处理,报错
}
public static void dosome() throws ClassNotFoundException{
}
此时main方法抛出异常:(一般不建议在main上抛出异常,程序会结束)为了程序的健壮性,一般main方法中的异常进行捕捉。
public static void main(String[] args) throws ClassNotFoundException{
dosome(); //编译通过
}
public static void dosome() throws ClassNotFoundException{
}
进行异常捕捉:catch可以写多个,这样写有利于程序的调试。(建议一个异常写一个catch,如果catch后面写的是比较大的类。那么下一个catch只有比这类更大才行。Catch是从上往下依次匹配,类从小到大)
public static void main(String[] args){
try {
dosome();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch ( Exception c ){
c.printStackTrace();
}
}
public static void dosome() throws ClassNotFoundException{
}
从jdk8开始catch支持:catch( ClassNotFoundException | FileNotFoundException e){}
中间可以使用 逻辑运算符
如果一个方法抛出异常,则该方法就会结束(作用类似于return)
异常对象中的两个重要方法:
String getMessage(); 获取异常简单信息(异常类构造方法后面传的参数)
printStacklTrace(); 打印异常堆栈信息(常用)
关于try…catch中的finally语句:
在finally子句中的代码是最后执行的,并且一定会执行,即使try语句块中出现了异常。
finally子句必须和try同时出现,不能单独编写。
try{
}catch(Exception e){
e.printStackTrace();
}finally{
}
通常在finally中完成资源的释放,即使try代码块出异常,finally也会执行(只有System.exit(0) 可以让finally不执行)
Try 可以和finally连用:
try {
System.out.println("123");
return;
}finally {
System.out.println("456");
} // 123 456
即使try中有return语句,finally也会执行
自定义异常(重点):java中提供的异常在实际开发中可能不够用
如何自定义:
- 编写一个类继承Exception或者RuntimeException
- 提供两个构造方法,一个无参,一个String参数的(接收简述信息)。
public class MyException extends RuntimeException{
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
}
下一篇: 【前端算法】折半查找