一、异常的分类及概念
java中异常情况分为:错误和异常
错误:一般是由于硬件或者软件运行环境中发的问题,并且无法靠代码的手段来解决。
异常:分为运行异常和编译异常,都是在程序运行中发生的问题,可以用编程来解决。
运行异常:程序执行时产生的,类加载之后,如果不提前加以处理,一旦发生会导致程序崩溃
编译异常:编写代码产生的,必须对异常进行处理或声明。
二、异常处理机制
异常处理的流程:
产生异常->抛出异常->(扑捉异常)->(处理异常)->(继续执行)
产生异常->抛出异常->都不声明或处理异常,(如果只有声明异常,到了最终也没有处理那么结果一样)程序会崩溃,并打印异常信息
注意的是:
1.当方法中有明确的抛出异常throw时,方法也要声明这个异常
2.抛出异常的方法被重写override时,重写的方法抛出的异常必须方法的子集(<=),多了会破坏异常处理的声明机制
异常信息包括:
线程 ;类 ; 异常数据 ; 异常位置(最上面自己写的)
三、异常处理
java中编译异常必须声明或处理;运行异常可选择处理(发现错误,专门用于测试代码时,可以不用处理)
java中异常的处理包括2种形式:
声明异常:throws,写在方法的参数列表后面,可以抛出多种类型的异常。
抛出异常:throw new Exception();//方法体中,抛出某个异常的对象,用于扑捉。
处理异常:用处理3个关键字
try{ 可能发生异常的代码}
catch(子类1){处理代码}
catch(子类2){处理代码}
catch(父类1){处理代码}
catch(父类2){处理代码}
catch(Exception ex){处理代码} 所有异常的父类,能抓所有的异常Exception
catch(Throwable th){处理代码} 异常和错误的父类,能抓所有的Error
finally{最后一定会执行的代码,一般是做清理工作}
四、自定义异常
为了统一处理异常,或者处理一些java定义中不是异常的(业务应用中的异常)的异常。我们有必要自己定义一些异常,用来解决这些问题。
public class MyException extends Exception{
public MyException(){
}
public MyException(Exception ex){
super(ex);
}
public MyException(String msg){
super(msg);
}
public MyException(Throwable th){
super(th);
}
public MyMethod(){
//自己的处理方式
//异常处理代码
}
}