Java异常机制
一、三种异常机制Java的异常机制有三种1.Error类及其子类表示的是错误它是不需要处理也不能处理的异常比如VirtualMachineError虚拟机错误ThreadDeath线程僵死等。2.RuntimeException类及其子类表示的是非受检异常是系统可能会抛出的异常可以去处理也可以不处理最经典就是NullPointException空指针异常和IndexOutOfBoundsException越界异常。3.Exception类及其子类不包含非受检异常表示的是受检异常这是必须处理的异常不处理则程序不能通过编译比如IOException表示I/O异常SQLException表示数据库异常。二、异常体系结构核心继承关系Java 所有异常都继承自ThrowableThrowable 的两种子类为ErrorException分为两大分支Throwable├─Error错误JVM 层面的严重错误程序无法处理如 OOM、StackOverflowError无需捕获。└─Exception异常程序可处理的异常又分两类├─受检异常Checked Exception编译期强制捕获/声明如 IOException、SQLException。├─非受检异常Unchecked Exception运行时异常编译期不强制处理如 NullPointerException、ArrayIndexOutOfBoundsException继承自 RuntimeException。三、常见的异常常见运行时异常非受检异常NullPointerException空指针异常JAVA8中可用Optional来避免一般是代码中出现了空对象时抛出该异常。IndexOutOfBoundsException数组下标越界异常当使用的数组下标超出数组允许范围时抛出该异常。ClassCastException类型转换异常当试图将对象强制转换为不是实例的子类时抛出该异常。触发场景强制类型转换不兼容Object obj 字符串; Integer num (Integer) obj; // String 不能转 IntegerNumberFormatException 数字格式化异常当试图将一个String转换为指定的数字类型而该字符串确不满足数字类型要求的格式时抛出该异常。IllegalArgumentException非法参数异常触发场景传入方法的参数不合法Thread.sleep(-1000); // 休眠时间不能为负数ArithmeticException算术异常触发场景数学运算错误最典型除零int a 10 / 0; // 除数不能为0NumberFormatException数字格式异常触发场景字符串转数字时格式错误Integer.parseInt(abc); // 非数字字符串无法转整数常见检查性异常受检异常SQLException SQL异常。IOException IO异常在对流操作时有可能会出现的异常。FileNotFoundException 找不到某个文件时会抛出该异常。ClassNotFoundException 找不到某个类时会抛出该异常。