关键词搜索

源码搜索 ×
×

一篇文章带你搞定 Java 中 throws 与 throw 关键字的区别

发布2020-01-15浏览507次

详情内容

一、throws 关键字

在定义一个方法时可以使用 throws 关键字声明,使用 throws 声明的方法表示此方法不处理异常,而交给方法的调用处进行处理,throws 使用格式如下:

public 返回值类型 方法名称(参数列表) throws 异常类{}
    class Math{
        public int div(int i,int j) throws Exception{//方法可以不处理异常
            int temp= i / j;//此处有可能产生异常
            return temp;
        }
    }
    
    public class Test{
        public static void main(String[] args) {
            Math m = new Math();//实例化 Math 对象
            try {
                System.out.println("除法操作:" + m.div(10,2));
            }catch (Exception e){
                e.printStackTrace();//打印异常
            }
        }
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    既然 throws 是在方法处定义的,那么主方法也可以使用 throws 关键字,但是主方法是程序的起点,所以此时主方法再向上抛异常,则只能将异常抛给 JVM进行处理。这就如同一个公司,部门处理不了的事情要上报给经理,经理再解决不了要上报给董事长,董事长再解决不了就到头了,而 Java 的“头”就是 JVM。

    二、throw 关键字

    与 throws 不同,可以直接使用 throw 抛出一个异常,抛出时直接抛出异常类的实例化对象即可

    public class Test{
        public static void main(String[] args) {
            try {
                throw new Exception("自己抛出异常!");//抛出异常的实例化对象
            }catch (Exception e){//捕获异常
                System.out.println(e);
            }
        }
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    虽然 throw 关键字的使用完全符合异常的处理机制,但是一般来讲用户都在避免异常的产生,所以不会手工抛出一个新的异常类的实例,往往会抛出程序中已经产生的异常类实例。

    三、throw 与 throws 的应用

    class Math{
        public int div(int i,int j) throws Exception{//方法可以不处理异常
            System.out.println("********* 计算开始 *********");
            int temp = 0;
            try {
                temp = i / j;//如果产生异常,则执行 catch
            }catch (Exception e){//捕获异常
                System.out.println("将异常交给被调用处");
                throw e;//将异常交给被调用处
            }finally {
                System.out.println("********* 计算结束 *********");
            }
            return temp;
        }
    }
    
    public class Test{
        public static void main(String[] args) {
            Math m = new Math();
            try{
                System.out.println("除法操作:" + m.div(10,0));
            }catch (Exception e){//进行异常的捕获
                System.out.println("异常产生:" + e);
            }
        }
    }
    
      2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    finally 作为异常的统一出口,所以此语句块的编写中尽量不要出现像 throw 或 return 这样的语句,这样可以避免不必要的问题出现

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载