zoukankan      html  css  js  c++  java
  • 受检异常与非受检异常的区别

      虽然之前知道,但最近看书时又忘记了,还是记下来吧。

    java中的异常和错误都继承自java.lang.Throwable
      这个类有两个直接的子类Error和Exception。
      这次主要记录Exception的相关信息,在异常处理的时候,都会接触到受检异常(checked exception)和非受检异常(unchecked exception)这两种异常类型。非受检异常指的是java.lang.RuntimeException和java.lang.Error类及其子类,所有其他的异常类都称为受检异常。两种类型的异常在作用上并没有差别,唯一的差别就在于使用受检异常时的合法性要在编译时刻由编译器来检查。正因为如此,受检异常在使用的时候需要比非受检异常更多的代码来避免编译错误。
      RuntimeException
      RuntimeException在默认情况下会得到自动处理。所以通常用不着捕获RuntimeException,但在自己的封装里,也许仍然要选择抛出一部分RuntimeException。
      RuntimeException是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的RuntimeException的任何子类都无需在throws子句中进行声明。(java api)
      以下是uncheckedExcepiton。
      Java.lang.ArithmeticException
      Java.lang.ArrayStoreExcetpion
      Java.lang.ClassCastException
      Java.lang.EnumConstantNotPresentException
      Java.lang.IllegalArgumentException
      Java.lang.IllegalThreadStateException
      Java.lang.NumberFormatException
      Java.lang.IllegalMonitorStateException
      Java.lang.IllegalStateException
      Java.lang.IndexOutOfBoundsException
      Java.lang.ArrayIndexOutOfBoundsException
      Java.lang.StringIndexOutOfBoundsException
      Java.lang.NegativeArraySizeException’
      Java.lang.NullPointerException
      Java.lang.SecurityException
      Java.lang.TypeNotPresentException
      Java.lang.UnsupprotedOperationException
    CheckedException
      除了runtimeException以外的异常,都属于checkedException,它们都在java.lang库内部定义。Java编译器要求程序必须捕获或声明抛出这种异常。
    一个方法必须通过throws语句在方法的声明部分说明它可能抛出但并未捕获的所有checkedException。
      Java.lang.ClassNotFoundException
      Java.lang.CloneNotSupportedException
      Java.lang.IllegalAccessException
      Java.lang.InterruptedException
      Java.lang.NoSuchFieldException
      Java.lang.NoSuchMetodException
       一直以来,关于在程序中到底是该使用受检异常还是非受检
    异常,开发者之间一直存在着争议,毕竟两类异常都各有优缺点。受检异常的特点在于它强制要求开发人员在代码中进行显式的声明和捕获,否则就会产生编译错误。这种限制从好的方面来说,可以防止开发人员意外地忽略某些出错的情况,因为编译器不允许出现未被处理的受检异常;从不好的方面来说,受检异常对程序中的设计提出了更高的要求。不恰当地使用受检异常,会使代码中充斥着大量没有实际作用、只是为了通过编译而添加的代码。而非受检异常的特点是,如果不捕获异常,不会产生编译错误,异常会在运行时刻才被抛出。
      非受检异常的好处是可以去掉一些不需要的异常处理代码,而不好之处是开发人员可能忽略某些应该处理的异常。一个典型的例子是把字符串转换成数字时会发生java.lang.NumberFormatException异常,忽略该异常可能导致一个错误的输入就造成整个程序退出。
      目前的主流意见是,最好优先使用非受检异常。

    转自:http://blog.csdn.net/nlznlz/article/details/53271045

  • 相关阅读:
    IDENT_CURRENT ,@@identity,SCOPE_IDENTITY() 之间对比
    移动无边框窗体
    Winform拖拽改变无边框窗体大小
    配置错误---分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
    c# winform中预防窗体重复打开
    C# TreeView 控件的综合使用方法
    c# vs2010 连接access数据库
    解决python pip缓慢
    securecrt密码获取
    linux开启telnet
  • 原文地址:https://www.cnblogs.com/2YSP/p/6884599.html
Copyright © 2011-2022 走看看