一、异常概述
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:类型转换异常