JAVA异常
Throwable是所有异常类的父类,Throwable类中定义了一些查看方法:
-
public String getMessage()
:获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。 -
public String toString()
:获取异常的类型和异常描述信息(不用)。 -
public void printStackTrace()
:打印异常的跟踪栈信息并输出到控制台。
包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrace()。
一、异常产生过程:
1、当程序运行时如果发生了异常,就会根据异常创建一个对应的异常类,这个类包含了异常的内容、位置、原因。
2、出现异常时如果没有通过try catch捕获异常则会向上抛出,首先抛给当前方法,如果方法体没有做处理则抛给main方法,main方法也没做处理,就抛给JVM
3、JVM收到异常后将异常信息打印到控制台、并且中断当前程序
二、异常处理
Java异常处理的五个关键字:try、catch、finally、throw、throws
1、抛出异常throw
1、throw关键字必须写在方法后面
2、throw 后边是 new 的具体对象且是Exception或Exception的子类对象,且只能指定一个
3、throw抛出了异常可以自己通过try catch处理,也可以在方法体上用throws声明异常让别人来处理
4、throw如果抛出的是运行异常则可以不做任何处理,JVM会在运行时来处理,但是如果抛出的是编译异常,则要么try catch 要么trhows异常
2、声明异常throws
1、throws必须写在类后面
2、throws后面是异常类的类名,且可以写多个异常
3、thorws代表声明可能出现的异常的情况,如果出现异常就向上抛出给调用者,最终给JVM处理
4、如果采用声明异常则出现异常后,后续代码不会被执行,JVM会中断程序
3、捕捉异常try…catch…finally
1、对有可能产生异常的代码进行监测,如果出现异常就执行catch中语句
2、catch需要定义一个异常的变量,用来接收try中抛出的异常对象。可以有多个catch对象,但是需要注意catch捕获的对象必须从子类到父类,不然下面写的就是多余的就会报错
3、出现异常后,不会中断程序后续执行 (try中异常后面的代码是不会被执行的)
4、finally无论是否有异常都会执行,一般用来释放资源
注意事项:
在子类与父类异常中:
1、如果父类方法声明了异常,那么子类重写父类方法时,可以选择声明同样的异常或是这个异常的子类,或者选择不声明异常
2、如果父类没有声明异常,则子类重写方法时也不能声明异常
3、如果子类中可能出现异常,则只能捕捉异常不能声明异常。
自定义异常类
1、需要继承exception类或者RunTimeException类
2、需要添加一个无参构造,和一个代异常信息的构造方法
3、构造方法中要调用父类的构成来让父类进行处理
public class MyException extends Exception{
public MyException(){
super();
}
public MyException(String s){
super(s);
}
}
编译器异常必须进行处理,运行异常可以不做处理交由JVM来处理