03-异常

作者: abboo | 来源:发表于2020-10-16 13:57 被阅读0次

38. 异常

异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常方式是中断处理

异常的根类是java.lang.Throwable 其下又两个子类:
java.lang.Error与java.lang.Exception。平常说的异常是java.lang.Exception

java.lang.Throwable:类是Java语言中所有错误或异常的超类:

==Exception==:编译器异常,进行编译(写代码)java程序出现的问题

==RuntimeExceptio==n:运行期异常,java程序运行过程中出现的问题

异常就相当于程序得了一个小毛病,把异常处理掉,程序可以继续执行

==Error==:错误就相当于程序得了一个无法治愈的毛病必须修改源代码,程序才能继续执行

处理异常两种方式:

  1. throws 异常
  2. try catch

thorw关键字

作用:可以使用throw关键字在指定的方法中抛出异常

使用格式:
thorw new xxxException("一场产生的原因")

注意:

  1. throw关键字必须写在方法的内部
  2. thorw关键字后边new的对象必须是Exception或者Exception的子类对象
  3. throw关键字抛出的指定异常对象,我们就必须处理这个异常对象

throw关键字后边创建的是RuntimeException或者是RuntimeException的子类对象,我们可以不处理,默认交给JVM处理
(打印异常对象,中断程序)

throw关键字后边创建的是编译异常(写代码的时候报错),我们就必须处理这个异常,要么thorws要么try...catch

Objects非空判断

public static <T> T requireNonNull(T obj):查看指定引用对象不是null,对null抛出异常

39.throws

异常处理的第一种方式,交给别人处理

作用:当方法内部抛出异常对象的时候,我们就必须处理这个异常对象

可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的调用者处理(自己不处理,给别人处理),最终交给jvm处理--》中断处理

修饰符 返回值类型 方法名(参数列表) throws AAAException,BBBException...{
    throw new AAAException("产生原因");
    throw new BBBException("产生原因");
}
//注意:
1. throws关键字必须写在方法声明处
2. throws关键字后边声明的异常必须是Exception或者是Excpetion的子类
3. 方法内部如果抛出了多个异常对象,那么throws后便必须也声明多个异常
        如果抛出的多个异常对象有子父类关系,直接声明父类异常即可
4. 调用了一个声明抛出异常的方法,我们就必须得处理声明的异常
        要么继续使用throws声明抛出,交给方法的调用者最终交给JVM,
        要么try...catch自己处理异常

try{
    //可能产生异常的代码
}catch(定义一个异常的变量,用来接收try中抛出的异常对象){
    //异常的处理逻辑,抛出异常对象之后怎么处理异常对象
    //一般在工作中,会把异常的信息记录到一个日志中
}
...
catch(异常类名 变量名){
    
}finally{
    无论是否出现异常都会执行
}

//注意
1. try中可能会抛出多个异常对象,那么就可以使用多个catch来处理这些异常对象
2. 如果try中产生了异常,那么就会执行catch中的异常处理逻辑,执行完毕chatch中的处理逻辑,继续执行try...catch之后的代码
   如果try中没有产生异常,那么就不会执行catch中的异常处理逻辑,处理完try中的代码,继续执行try...catch之后的代码 
   
//Throwable类中定义了3个异常处理的方法
  String getMessage()返回此throwable的简短描述
  String toString()返回此throwable的详细消息字符串
  void printStackTrace()JVM打印异常对象,默认此方法,打印的异常信息是最全面的

//注意
1. finally不能单独使用,必须和try一起使用
2. finally一般用于资源释放(资源回收),无论程序是否出现异常,最后都要资源释放

40. 多个异常处理

  1. 多个异常分别处理
  2. 多个异常一次捕获多次处理
  3. 多个异常一次捕获一次处理

多个异常分别处理:
每个异常一个try...catch

多个异常一次捕获多次处理:
一个try多个catch

catch里边定义的异常变量,如果有子父类关系,那么子类的异常变量必须写在上边,否则就会报错

try中抛出的异常对象会从上到下依次赋值给catch中定义的异常变量

多个异常一次捕获一次处理:
try{}catch(Exception e){}

  • ==运行时异常==被抛出可以不处理.即不捕获也不声明抛出
  • 如果finally有return语句,永远返回finally中的结果,避免该情况
  • 如果父类抛出了多个异常,子类重写父类方法时,抛出和父类相同的异常或者是父类异常的子类或者不抛出异常
  • 父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常.此时子类产生该异常只能捕获处理,不能声明抛出

父类异常怎么样,子类异常就怎么样

  • 在try/catch后可以追加finally代码块,其中代码一定会执行,通常用于资源回收

40. 自定义异常

格式

public class XXXException extends Exception | RuntimeException{
    //添加一个空参数的构造方法
    public XXXException(){
    }
    
    //添加一个带异常信息的构造方法
    //查看源码发现,所有异常类都会有一个带有异常信息的构造方法,方法内部会调用父类带异常信息的构造方法
    //让父类来处理这个异常信息
    public XXXException(String message){
        super(message)
    }
}

相关文章

网友评论

      本文标题:03-异常

      本文链接:https://www.haomeiwen.com/subject/rjinpktx.html