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异常,忽略该异常可能导致一个错误的输入就造成整个程序退出。

      一个方法必须声明所有可能抛出的受检异常, 而非受检异常要么不可控制( Error),要么就应该避免发生( RuntimeException)(try  catch)。如果方法没有声明所有可能发生的受查异常, 编译器就会发出一个错误消息。

  • 相关阅读:
    Java -- 基于JDK1.8的LinkedList源码分析
    Java -- 基于JDK1.8的ArrayList源码分析
    Android -- AsyncTask源码解析
    Android -- 自定义view实现keep欢迎页倒计时效果
    Android -- 《 最美有物》好看的点赞效果
    Android -- Glide框架详解(一)
    Android -- 从源码解析Handle+Looper+MessageQueue机制
    面试 -- 关于Activity的相关知识
    用最简单的一个例子看maven冲突的解决办法
    【跟我一起读 linux 源码 01】boot
  • 原文地址:https://www.cnblogs.com/alex-xyl/p/12448461.html
Copyright © 2011-2022 走看看