关于java异常为什么要声明的原理

1 篇文章 0 订阅
1 篇文章 0 订阅

很多人可能要问,java这是怎么了,他没事找事声明异常干嘛呀?接下来给大家浅显的讲一下java为什么要声明异常。

首先我们都知道只要在一个方法体中抛出了异常,java就希望调用者能够去捕获异常。

于是我们通过throws便可以声明某个方法可能抛出的异常

下面我们看一个程序稍微加深一下了解

1  class Son1Exception extends Exception{

2

3  }
4  class Son2Exception extends Exception{

5  

6   }

7  public class A{
8   void test1() throws Son1Exception{
9   throw new Son1Exception();
10   }
11   public static void main(String[] args){
12   A a=new A();
13   try{
14   a.test1();
15   }
16   catch(Son1Exception()){
17   System.out.print("异常1");
18   }
19   }

20  }

这个程序没有错误

但是如果我们把第8行去掉声明改成"void test1(){",那么显然系统报错

接下来聊到重点了,有一个有趣的现象,如果该程序其他地方不变,我们单单把test1()函数的函数体去掉

即void test1(){   


 }

结果会怎样呢?

大家可能会想:这还不简单,test()这东西连函数体没了,他也就不抛出任何异常,如果这函数连异常都抛不出了,那他还有什么用啊?catch岂不是不能捕获到Son1Exception了,那么16行是不是将会出现:“执行不到的 Son2Exception 的 catch 块。从未从 try 语句主体抛出此异常。”呢?

如果你这么想,那就大错特错了,不信你试试,改了以后虽然运行后什么都没发生,但程序仍然编译成功。

看到这里,大家可能就明白了,调用一个函数无论这个函数你抛不抛出异常,只要你声明了异常,程序就会准备好接收这个异常。

这么说更贴切点:声明就像是身份证,只要你有身份证,不管你有没有这个人存在,大家都认为有可能有这个人存在,反过来说,你没有身份证,即使你存在,也没有人会知道有这么一个人。

所以说java他处理异常的第一步是先核对声明,再根据声明做好准备再判断是不是有这么一个异常的。

当然了,RuntimeException类异常就另当别论了,这是后话



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值