Java 异常处理 之 异常概述与异常体系结构

一、异常概述

  1、异常

    在 Java 语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)

    指的是程序在执行过程中,出现的非正常的情况,最终会导致 JVM 的非正常停止。

    在 Java 等面向对象的编程语言中,异常本身就是一个类,产生异常就是创建异常对象并抛出了一个异常对象。

    Java 处理异常的方式是中断处理

    异常指的并不是语法错误,语法错误,编译不通过,不会产生字节码文件,根本不能运行。

二、异常体系

   异常机制 其实是帮助我们找到程序中的问题。

  java.lang.Throwable:类是 Java 语言中所有错误或异常的超类。其下有两个子类:

      (1)Exception:异常,进行编译(写代码) java 程序出现的问题,程序员可以通过代码的方式纠正,使程序继续运行。

      (2)Error:严重错误,无法通过处理的错误,只能事先避免,必须通过修改源代码,程序才能继续执行。经典代表:VirtualMachineError(堆内存溢出OutOfMemoryError,栈内存溢出StackOverflowError)

  

 1  * 
 2  * java.lang.Throwable
 3  *         |-----java.lang.Error:一般不编写针对性的代码进行处理。
 4  *         |-----java.lang.Exception:可以进行异常的处理
 5  *             |------编译时异常(checked)
 6  *                     |-----IOException
 7  *                         |-----FileNotFoundException
 8  *                     |-----ClassNotFoundException
 9  *             |------运行时异常(unchecked,RuntimeException)
10  *                     |-----NullPointerException
11  *                     |-----ArrayIndexOutOfBoundsException
12  *                     |-----ClassCastException
13  *                     |-----NumberFormatException
14  *                     |-----InputMismatchException
15  *                     |-----ArithmeticException
16  * 

三、异常分类

  1、Java 程序在执行过程中所发生的异常事件可以分为两类:

    (1)Error:Java 虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError和 OOM。一般不编写针对性代码进行处理;

    (2)Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。如:空指针访问,网络连接中断,视图读取不存在的文件;

  2、解决方法

    对于这些错误,一般由两种解决方法:① 遇到错误就终止程序的运行;② 在编写程序时,就考虑到错误的检测、错误小时的提示,以及错误的处理;

   捕获错误最理想的是在 编译期间,但有的错误只有在运行时才会发生。例如:除数为0,数组下标越界等;

  3、异常分类

    异常(Exception)的分类:根据编译时期还是运行时期来分类

                                      

      蓝色:非受检(unchecked)异常

      红色:受检(checked)异常

     4、运行时异常

    (1)RuntimeException 运行时期异常(或它的子类)。又称非受检异常,即在运行时期,检查异常,在编译时期,运行异常不会编译器检测(不报错)。(如:空指针异常、数组下标越界、类型转换异常、数字格式异常)这些异常可以完全避免掉,编译器不要求强制处理的异常;

    (2)对于这类异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响;

  5、编译时异常

    (1)Exception 异常。除了RuntimeException系列以外的,都是编译时异常,又称为受检异常。在编译时期就会检查,如果没有处理异常,则编译失败。(如:IOException、日期格式化异常)

    (2)指编译器要求必须处理的异常。即程序在运行时由于外界因素造成的一般性异常。编译器要求Java程序必须捕获或生命所有编译时异常。

    (3)对于这类异常,如果程序不处理,可能会带来意想不到的结果。

  

    

三、异常的产生过程解析

  异常的产生过程分析(分析异常的怎么产生的,如何处理异常)

  

四、常见的异常  

    

ArrayIndexOutOfBoundsException:数组下标越界异常

NullPointerException:空指针异常

ArithmeticException:数学运算异常

ClassCastException:类型转换异常

原文地址:https://www.cnblogs.com/niujifei/p/14292740.html