1.异常概述
什么是异常?代码在运行时期发生的问题就是异常。
在Java中,把异常信息封装成了一个类,当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置,原因等)。
1.1 异常的继承体系
Java中使用Exception类来描述异常。
public class Exception extends Throwable
Exception 类及其子类是形式Throwable指示合理的应用程序想要捕获的条件。
异常类和任何不是RuntimeException的子类的子类都是检查异常 。 检查的异常需要在方法或构造函数的throws子句中声明,如果它们可以通过执行方法或构造函数抛出,并在方法或构造函数边界之外传播。
继续观察,我们发现Exception有继承关系,它的父类是Throwable。Throwable是Java语言中所有错误或异常的父类,即祖宗类。
进入Throwable类,原来这个类已知子类有Error、异常两个。
Throwable:它是所有错误与异常的父类
※-----Error错误
※-----Exception编译期异常,进行编译Java程序时出现的问题
※------RuntimeException运行期异常,Java程序运行过程中出现的问题
1.2 异常与错误的区别
【1】Error类是所有错误的父类,它和它的子类都被视为未经检查的异常,用于编译时检查异常。
程序在运行期间发生了某种错误,Error错误通常没有具体的处理方式,程序将会结束运行。
Error错误的发生往往都是系统级别的问题,都是JVM所在系统发生的,并反馈给JVM的。
我们无法针对处理,必须修正代码避免Error错误的产生。
【2】异常的子类简直不要太多了,实际开发中,异常的关注度较高
程序在编译、运行期间发生了某种异常,我们可以对异常进行具体的处理。
出现异常时,将异常处理掉,可以继续执行程序;若不处理异常,程序将会结束运行。
1.3 异常对象的产生原因和处理方式
A:异常对象的产生原因
代码:
//工具类
public class ArrayTools{
//对给定的数组通过给定的角标获取元素。
public static int getElement(int[] arr,int index) {
int element = arr[index];
return element;
}
}
//测试类
public class ExceptionDemo2 {
public static void main(String[] args) {
int[] arr = {34,12,67};
int num = ArrayTools.getElement(arr,4)
System.out.println("num="+num);
System.out.println("over");
}
}
原因分析:
* a: 由于没找到4索引,导致运行时发生了异常。这个异常JVM认识:ArrayIndexOutOfBoundsException。
这个异常Java本身有描述:异常的名称、异常的内容、异常的产生位置。
java将这些信息直接封装到异常对象中。new ArrayIndexOutOfBoundsException(4);
* b:throw new ArrayIndexOutOfBoundsException(4);产生异常对象。JVM将产生的异常抛给调用者main()方法。
* c:main()方法接收到了数组索引越界异常对象。
由于main()方法并没有进行处理异常,main()方法就会继续把异常抛给调用者JVM。
当JVM收到异常后,将异常对象中的名称、异常内容、位置都显示在就控制台上。同时让程序立刻终止。
B:异常的处理方式
* a:JVM的默认处理方式
* 把异常的名称,原因,位置等信息输出在控制台,同时会结束程序。
* 一旦有异常发生,其后来的代码不能继续执行。
* b:解决程序中异常的手动方式
* a):编写处理代码 try...catch...finally
* b):抛出 throws
愿你就像早晨八九点钟的太阳,活力十足,永远年轻。