throwable error和exception的关系_c amp「建议收藏」

throwable error和exception的关系_c amp「建议收藏」java异常继承关系Erro:程序无法处理的错误,编译器不做检查

java异常继承关系

在这里插入图片描述
Erro:

  • 程序无法处理的错误,编译器不做检查。
  • 属于JVM需要负担的责任
  • 常见error:NoClassDefFoundError(找不到class定义的异常);OutOfMemoryError(内存溢出异常);StackOverflowError(深递归导致栈被耗尽而抛出的异常)

Exception:

  • 程序可以处理的异常,捕获之后可以恢复。
  • 分为RuntimeException(非检查异常)和checked Exception(检查异常);
  • RuntimeException是程序运行时发生的异常,是程序应该负担的责任。
  • checked Exception是编译时可以发现的异常,是java编译器应该承担的责任。
  • 常见RuntimeException:NullPointeException(空指针异常);ClassCastException(类型强。制转换异常);IllegalArgumentException(传递非法参数异常);IndexOutOfBoundsException(下标越界异常);NumberFormatException(数字格式异常)等。
  • 常见checked Exception:ClassNotFoundException(找不到指定class的异常);IOException(IO操作异常)

异常影响性能:

  • try-catch语句会影响jvm对代码的优化,所以应该只包含必要的代码段;
  • 每次实例化一次Exception,jvm对线程栈进行一次快照,这是一个比较重的操作,非常耗费资源;

Throw&Throws

Throws:

  • 用在方法后面,把异常向上抛出,在调用该方法处进行try catch。
  • throws可以抛多个异常。
  • 当java代码发生异常时,由jvm抛出异常对象,导致代码中断,这个时候jvm做的操作就是:创建异常对象,然后抛出。
  • throws Exception表示的是本方法不处理异常,交给被调用处处理,而且被调用处必须处理(必须加try catch,不然编译不过)
  • 如果方法后面不加throws Exception,方法出了异常就会向上传递抛出,如果调用者没有处理,继续向上抛出,最终交给虚拟机处理,程序会中断,但是如果在调用处捕获,程序还可以继续进行,只是抛异常的方法受到影响。(如果你不希望异常层层往上抛,你就要用throws Exception) ,
  • 异常处理的原则是尽可能早的catch异常,正常的程序不应该写throws Exception
  • 运行异常(继承RuntimeException)可以不捕获,向上抛,如果一直没有处理,则jvm会自动处理(停止线程,打印异常)。
  • 非运行异常,必须捕获或者在方法声明
void test()throws IOException,SQLException
{ 
   
...
}

Throw:

  • 只能抛出一个异常。
  • 用来手动抛出异常。
Exception e=new Exception("手动抛出");
throw e;

什么时候try catch异常,什么时候throw异常?

  • 笼统的讲就是需要在本级处理的异常就catch,需要上级处理的异常就向上抛出。
  • 当你的层需要跟外部分开时,你就需要catch.
    比如:service和dao层,在大部分情况下,dao服务于service,但这都属于开发组内部,所以,dao直接throw就可以了。
    但是到了service层,调用service的是另外的开发小组(比如客户端小组),从架构上来说,就需要隐藏代码的内部细节,这个时候就必须要catch掉,然后该写日志写日志,改重新封装错误重新封装。

今天的文章throwable error和exception的关系_c amp「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86151.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注