重新认识异常之整体结构

异常分类

  • 编译异常
  • 运行异常
  • 逻辑异常

异常继承结构:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • Error: 严重异常错误 不可用用程序修改(一般发生于JVM中的异常)
  • Exception: 即逻辑异常,运行异常,java编译器不会检查,程序本身可以处理的异常,可以捕获异常进行处理
  • 非运行时异常:即编译异常,仅可能在程序中处理
  • 非受查异常:java编译器不会进行检查
  • 受查异常:java编译器会进行检查

异常处理

  • 捕获异常
  try{
   // 可以发生异常的代码
  }catch(可能出现的异常类型 e1){
    // 处理异常逻辑
  }catch(可能出现的异常类型 e2){
    // 处理异常逻辑
  }finally{
    // finally部分可有可无
  }

1.如果在try中没有发生异常,则直接指向finally中的代码逻辑
2.如果在try中发送异常,则会在catch中匹配相应的异常类型进行处理,再执行finally中的代码逻辑
3.建议多个catch类型时处理范围重小到大进行书写

  • 声明异常
public FileInputStream(String name) throws FileNotFountException{
   this(name != null ? new File(name): null);
}

1.关键字 throws 可能出现异常时可以使用throws进行抛出异常
2.子类声明异常的范围不能超过父类声明的范围
3.父类没有声明异常,子类也不能
4.子类重写的方法中声明的异常类,需要与父类被重写方法中声明的异常类保存一致,或是父类被重写方法中声明的异常类的子类

自定义异常

  • 为什么要自定义异常:封装,快速定位
  • 自定义异常的步骤:1.创建类;2.继承Exception类或者Exception的子类;3.重写构造方法
public class DemoException extends Exception{
    public DemoException(){
    }

   public DemoException(String message){
   super(message);
   }
}

手动抛出异常

  • 找到一个合适的异常类
  • 创建这个异常类的对象
  • 抛出这个对象
   public class Daughter{

     public static void main(String[] args){
        Daughter d = new Daughter();   
        try{
          d.eat();
        }catch(DemoException e){
           e.printStackTrace();
       }

    public void eat()throws DemoException{
        System.out.println("出现异常了");
        throw new DemoException("异常信息");
       }
    }
 }

访问异常信息

  • 堆栈轨迹(stack trace): 方法调用过程的列表
  获取异常信息的重要方法(Exception类)
  1.printStackTrace();
  2.getStackTrace();

git地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值