• 运行时异常与一般异常有何异同?


    一、异常的概念

    Java异常类层次结构图:

      

    Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。

    Error(错误):

      是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。

    Exception(异常):

      是程序本身可以处理的异常。

    Exception可以分为checked exceptions和unchecked exceptions:

    1、unchecked exceptions(运行时异常)都是RuntimeException类及其子类异常,就是我们在开发中测试功能时程序终止,控制台出现的异常,比如:

    • NullPointerException(空指针异常)、
    • IndexOutOfBoundsException(下标越界异常)
    • ClassCastException(类转换异常)
    • ArrayStoreException(数据存储异常,操作数组时类型不一致)
    • IO操作的BufferOverflowException异常

    2、 checked exceptions 非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
      通俗的话说就是在写代码时出现红线,需要try catch或者throws时出现的异常。

    二、关于异常的题

    1、运行时异常与一般异常有何异同?

      异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

      理解:

      运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过 NullPointerException 异常,它就是运行时异常,并且,这种异常还是最常见的异常之一。RuntimeException 体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理 RuntimeException 的原则是:假如出现 RuntimeException,那么一定是程序员的错误,例如,可以通过检查数组小标和数组边界来避免越界访问异常。

      一般异常:定义方法时必须声明所有可能会抛出的checked exception;在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;checked exception是从java.lang.Exception类衍生出来的。

    2、error和exception有什么区别?

      error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

    3.Java中的异常处理机制的简单原理和应用

      异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息,可以用一个对象来表示,Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息。

      Java对异常进行了分类,不同类型的异常分别用不同的Java类来表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception,Error表示应用程序本身无法克服和恢复的一种严重问题,程序只有死的份了,例如,说内存溢出和线程死锁等系统问题。Exception表示程序表示程序还能够克服和恢复的一种严重问题,其中又分为系统异常和普通异常,系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死掉,例如,数组脚本越界(ArrayIndexOutOfBoundsException)、空指针异常(NullPointerException)、类转换异常(ClassCastException);普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。

      java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须try···catch处理或用throws声明继续抛给上层调用方法处理,所以普通异常也称为checked异常,而系统异常可以处理也可以不处理,所以,编译器不强制用try...catch处理或用throws声明,所以系统异常也称为unchecked异常。

    4、runtime exception举例。

     1 ArithmeticException——由于除数为0引起的异常;
     2 ArrayStoreException——由于数组存储空间不够引起的异常;
     3 ClassCastException—一当把一个对象归为某个类,但实际上此对象并不是由这个类创建的,也不是其子类创建的,则会引起异常;
     4 IllegalMonitorStateException——监控器状态出错引起的异常;
     5 NegativeArraySizeException—一数组长度是负数,则产生异常;
     6 NullPointerException—一程序试图访问一个空的数组中的元素或访问空的对象中的 方法或变量时产生异常; OutofMemoryException——用new语句创建对象时,如系统无法为其分配内存空 间则产生异常;
     7 SecurityException——由于访问了不应访问的指针,使安全性出问题而引起异常;
     8 IndexOutOfBoundsExcention——由于数组下标越界或字符串访问越界引起异常;
     9 IOException——由于文件未找到、未打开或者I/O操作不能进行而引起异常;
    10 ClassNotFoundException——未找到指定名字的类或接口引起异常;
    11 CloneNotSupportedException——一程序中的一个对象引用Object类的clone方法,但 此对象并没有连接Cloneable接口,从而引起异常;
    12 InterruptedException—一当一个线程处于等待状态时,另一个线程中断此线程,从 而引起异常,有关线程的内容,将在下一章讲述;
    13 NoSuchMethodException一所调用的方法未找到,引起异常;
    14 Illega1AccessExcePtion—一试图访问一个非public方法;
    15 StringIndexOutOfBoundsException——访问字符串序号越界,引起异常;
    16 ArrayIdexOutOfBoundsException—一访问数组元素下标越界,引起异常;
    17 NumberFormatException——字符的UTF代码数据格式有错引起异常;
    18 IllegalThreadException—一线程调用某个方法而所处状态不适当,引起异常;
    19 FileNotFoundException——未找到指定文件引起异常;
    20 EOFException——未完成输入操作即遇文件结束引起异常。

    参考:https://blog.csdn.net/qq_22860341/article/details/73610537

  • 相关阅读:
    读书笔记之理想设计的特征
    一些javascript 变量声明的 疑惑
    LINQ 使用方法
    Google MySQL tool releases
    读书笔记之设计的层次
    EF之数据库连接问题The specified named connection is either not found in the configuration, not intended to be used with the Ent
    转载 什么是闭包
    javascript面向对象起步
    Tips
    数据结构在游戏中的应用
  • 原文地址:https://www.cnblogs.com/116970u/p/11495977.html
Copyright © 2020-2023  润新知