Java基础之异常

java中异常的分类
异常时java中的一个类,所有的异常都有一个公共的父类Throwable,它有两个直接的子类,Error和Exception;
在这里插入图片描述

Error: 系统级异常,是java中无法处理的异常,比如栈溢出
Exception : 是程序员可以自己捕获处理的异常
Throwable的继承关系

按照处理方式不同,异常还可以分为:
**checked exception:语法要求必须要用try catch 语句或者throws语句处理的异常
**uncheck exception:语法不要求一定要用try catch语句或者throws语句处理的异常

Error和RuntimeException是unchecked exception的子类,我们一般使用RuntimeException

try …catch 语句

  public static void main(String[] args) {
        // >> TODO try 语句中如果发生了异常(Exception),那么程序会跳转到catch语句。
        // >> TODO Java会将异常相关信息封装在一个异常类的实例中,ex是指向这个异常实例的引用
        // >> TODO "处理"最简单的方法,就是调用printStackTrace将异常信息输出到控制台
        // >> TODO catch语句执行完毕,程序会继续向下顺序执行
        try {
            int[] arr = new int[1];
            arr[1] = 9;
        } catch (Exception ex) {

            int abc = 999;
            ex.printStackTrace();
        }

throws和throw关键字
1.抛出别人抛过来的异常


    // >> TODO 可以使用throws关键字,抛出一个异常。
    // >> TODO 抛出的异常类型,可以是实际异常的父类或者本身。
    // >> TODO 可以抛出多种类型的异常,用逗号分开就可以。
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        Class clazz = Class.forName("abc");
        clazz.getField("");
    }

2.抛出自己创建的异常


    public static void causeException() throws Exception {
        // >> TODO 可以创建一个checked exception,然后用throw关键字扔出去
        // >> TODO 这时候就需要方法也要有throws语句,同样的,throws语句的类型要能覆盖实际异常的类型
        throw new Exception("");
    }

抽象方法里的异常

public void danger() throws Exception {
        // >> TODO 接口中声明了抛出异常,实现类中可以抛,也可以不抛。抛的话必须是接口声明的类或其子类
        throw new Exception("");
    }

    @Override
    public void safe() {
        // >> TODO 接口中没有声明抛出异常,实现类中可以抛RuntimeException,也可以不抛。
        // >> TODO 如果抛 checked exception,就会出错
        // >> TODO 可以选择catch住 checked exception,然后将它封在RuntimeException里

java异常的传递
方法调用栈里,异常会沿着调用栈传递,如果中间被catch住,就会中断

自定义异常

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值