Java异常


异常处理:抓抛模型

捕获

异常处理方式:try-catch-finally , throws

try-catch-finally

使用

    * try-catch-finally使用:
    *   try{
    *     可能出现异常的代码
    *   } catch(异常类型1 变量名1) {
    *    处理异常的方式1
    *   }catch(异常类型2 变量名2) {
     *    处理异常的方式2
     *  }catch(异常类型3 变量名3) {
     *    处理异常的方式3
     *  } finally{
     *      一定会执行的代码
     *  }

说明

     *  1.finally 是可选的,里面的代码一定会被执行
     *  2.使用try将可能出现异常的代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配
     *  3.一旦try中的异常匹配到某一个catch时,就进入catch中进行异常处理,处理完成就跳出当前的try-catch结构,继续执行后面的代码
     *  4.catch中的异常类型如果没有字符类关系,则声明顺序没有要求,如果满足字符类关系,要求子类声明在父类的上面,否则报错为不可达代码
     *  5.常用异常处理方式:String :getMessage()、printStackTrace()
     *  6.在try结构中声明的变量只能在try结构中被调用
     *  7.像数据库的连接,输入输出流,网络编程Socket等资源,JVM不能自动回收,需要手动进行资源释放,这些代码就可以放在finally中
     *  8.try-catch结构可以嵌套

我们一般只在编译时可能会出现的异常加try-catch结构,运行时异常不用这个结构

        try{
            int[] array = new int[10];
            array[10] = 10;
        } catch (ArrayIndexOutOfBoundsException e){
            System.out.println("数组越界异常");
        } finally {
            System.out.println("这里总会执行");
        }

throws

使用

     *  1.throws + 异常类型  写在方法的声明处,指明此方法执行时,可能会抛出的异常类型,一旦方法体执行出现异常就会将该异常抛出,其它地方调用此方法时
     * 仍需要处理此异常
     *  2.throws只是将异常抛给了方法的调用者,没有处理掉这个异常
    public void method1() throws IOException {
        int[] array = new int[10];
        array[10] = 10;
    }

    public void method2(){
        try {
            method1();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

抛出

程序在运行过程中一旦出现异常,就会生成一个异常类对象,并将此对象抛出,一旦抛出对象,其后的代码就不再执行

    * 抛:程序在运行过程中一旦出现异常,就会生成一个异常类对象,并将此对象抛出,一旦抛出对象,其后的代码就不再执行
    *   关于异常对象的产生:1.系统自动生成的异常对象
    *                   2.手动生成的一个异常对象,并抛出(throw)
    private int id;
    public void setId(int id){
        if (id > 0){
            this.id = id;
        } else {
            throw new RuntimeException("输入的数据非法");
        }
    }

如果选择处理异常的方式

如果父类中被重写的方法没有throws方式处理异常,则子类重写方法也不能使用throws,如果子类需要处理异常就只能使用try-catch了

如何自定义异常类

  1. 继承于现有的异常结构:RuntimeException、Exception
  2. 提供全局常量serialVersionUID
  3. 提供重载的构造器
//自定义一个异常类
class MyException extends RuntimeException{
    static final long serialVersionUID = -7034897190745766939L;
    public MyException(){

    }
    public MyException(String msg){
        super(msg);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轩尼诗道-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值