1 异常概念
异常
在执行过程中,出现非正常情况导致JVM停止。在Java中异常本身是一个类,产生异常就是创建异常对象并抛出一个异常对象。
异常体系
异常的根类是java.lang.Throwable,其下有两个子类java.lang.Error和java.lang.Exception
Error:严重错误,无法处理的错误
Exception:异常,程序员可以通过代码纠正
常用方法:
public void printStackTrace()
:打印异常的详细信息,包含了异常的类型,异常的原因,出现的位置。在开发和调试阶段都得使用。public String getMessage()
:获取发生异常的原因,提示给用户的时候就提示错误原因
异常的处理
- Java中异常处理的五个关键字: try、catch、finally、throw、throws
1. 抛出异常throw
在指定的方法中抛出指定的异常:throw new xxxException (“异常产生的原因”)
注意事项
throw关键字必须写在方法内部
throw关键字后边new的对象必须是Exception或者它的子类对象
throw关键字抛出指定的异常独享就必须处理这个异常对象。若创建的是RuntimeException或者RuntimeException的子类对象,可以交给JVM处理。若创建的是编译异常,就必须处理(throws或者try catch)
1 | public static int getElemnt(int[] arr,int index){ |
2. Objects非空判断
- public static < T > requireNonNull(T obj):查看指定引用对象不是null
1 | int[] arr = null; |
3. 声明异常throws
当方法内部抛出异常对象的时候,可以使用throws关键字处理异常对象,把异常对象申明抛出给方法的调用者处理(throws或者try catch)。
修饰符 返回值类型 方法名(参数列表)throws AAAException,BBBException{
throw new AAAException(“产生原因”);
throw new BBBException(“产生原因”);
}
throws关键字后面声明的异常必须是Exception或者其子类,方法内部抛出多个异常都必须声明。若存在父子类关系,就直接声明父类
1 | public static void readFile(String fileName) throws IOException { |
4. 捕获异常try catch
try{//可能会产生异常的代码}
catch(异常类名 变量名){//异常的处理逻辑 }
1 | public static void main(String[] args) { |
5. finally代码块
- 一些特定的代码无论是异常是否发生,都需要执行。因为异常会引起程序跳转,导致有些语句执行不到
try....catch......finally
:finally一般用于资源释放。
1 | public static void main(String[] args) { |
6. 注意事项
- 如果父类抛出了多个异常,子类重写父类方法时,抛出和父类相同的异常或者是父类异常的子类或者不抛出异常
- 父类方法没有抛出异常,子类重写父类该方法时不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出
自定义异常类
格式
public class XXXException extends Exception | RuntimeException{
//添加一个空参数的构造方法
//添加一个带异常信息的构造方法
}
1 | public class RegisterException extends Exception{ |