异常和断言2

1.在方法中抛出异常

若某个方法可能会发生异常,但是不想在当前的方法中处理这个异常,则可以使用 throws 、 throw 关键字在方法中抛出异常。

1.1 throws关键字抛出异常

throws 关键字通常被应用在声明方法时,用来指定方法可能会抛出的异常。多个异常可使用逗号分隔开。
注意:子类重写父类方法时不能回避比父类方法异常更大的异常

这里写图片描述

使用throws回避异常的示意图
这里写图片描述


1.2 throw关键字抛出异常

throw关键字通常用于方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即终止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法的声明中指明要抛出的异常;如果要捕捉throw抛出的异常,则必须是try-catch语句块。

这里写图片描述

示例代码1:

package dong.test;

public class ExceptionTest {

    public static void main(String[] args) {
        try{
            int i = 100/0;
            System.out.println(i);
        }catch(Exception e){
            System.out.println("1");
        }finally{
            System.out.println("2");
        }

        System.out.println("3");
    }
}

运行结果:

1
2
3

示例代码2:在catch中throw抛出一个异常

package dong.test;

public class ExceptionTest {

    public static void main(String[] args) {
        try{
            int i = 100/0;
            System.out.println(i);
        }catch(Exception e){
            System.out.println("1");
            throw new RuntimeException();
        }finally{
            System.out.println("2");
        }

        System.out.println("3");
    }
}

运行结果:不会执行打印“3”语句。

1
Exception in thread "main" 2
java.lang.RuntimeException
    at dong.test.ExceptionTest.main(ExceptionTest.java:11)

1.2.1 throw和throws关键字的区别

  1. throw:用于抛出异常对象,用在函数内;
  2. throws:用于抛出异常类,后面跟的是异常类名,可以有多个,用逗号隔开;throws用在函数上。

1.2 自定义异常

用户只需要继承Exception类或者其子类即可自定义异常类。
所以自定义异常类 必须是Exception类的子类或者是Exception子类的子类

这里写图片描述

自定义异常步骤:

  1. 创建自定义异常类;
  2. 在方中通过throw关键字抛出异常对象;
  3. 如果在当前的抛出异常的方法中处理异常,那么可以使用try-catch语句块来捕获并处理异常,否则在方法的声明中通过throws关键字指明要抛出给方法调用者的异常,继续下一步操作;
  4. 在出现异常的方法的调用者中捕获并处理异常。

3.演示代码

1.首先创建一个自定义异常类MyException

package com.dong.test;

public class MyException extends Exception{
    public MyException(String errorMessage){
        super(errorMessage);
    }
}

2.编写一个测试类

package com.dong.test;

public class TestMyException {
    public static void main(String[] args){
        try {
            int result = avg(0,-9);
            System.out.println(result);
        } catch (MyException e) {
            e.printStackTrace();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    //throws 指定该方法可能抛出MyException异常
    private static int avg(int i, int j) throws MyException {
        if(i<0||j<0){
            throw new MyException("不可以使用负数");//throw 抛出自定义异常对象
        }
        return i/j;
    }

}

补充:
当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象。e是此对象引用名称。然后e(引用)会自动调用Exception类中指定的方法,也就出现了e.printStackTrace() ;
printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。

运行结果:

com.dong.test.MyException: 不可以使用负数
at com.dong.test.TestMyException.avg(TestMyException.java:18)
at com.dong.test.TestMyException.main(TestMyException.java:6)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值