异常的处理
1、异常概述
异常:指的是程序在执行过程中,出现的非正常的情况,如果不处理最终会导致jvm
的非正常停止。
2、异常体系
异常的根类是Java.lang.Throwable,其下有俩个子类:java.lang.Exception和java.lang.
Error。其中Error是严重错误,无法通过处理的错误,只能事先避免,如StackOverflowError和OutOfMemoryError.
而Exception表示异常,其它因编程错误或 偶然的外在因素导致的一般性问题,程序员可以通过代码的方式纠正
使代码继续运行,是必须处理的。如空指针异常、试图读取不存在文件、网络连接终断,数据下标越界。
Throwable中常用的方法:
public void printStackTrace():打印异常的详细信息。
(包括异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrac)
public String getMessage():获取发生异常的原因。提示给用户的时候,就显示是错误原因。
3.异常的分类
Exception:所有可编辑异常的父类
编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如文件找不到异常)
运行时期的异常:runtime异常。在运行时期,检查异常。在编译时期,运行异常不会被编译器检测到
(不报错)。如数组的索引越界,类型转换异常。程序员应该积极避免其出现的异常,而不是使用try..catch处理,因为
这类异常都很普遍,若都是使用try..catch或throws处理可能会对程序的可读性和运行效率产生影响。
4.常见的错误和异常
StackOverflowError:方法栈满了
OutOfMemoryError:定义数值过大;
NullPointerException:空指针异常;
ClassCastException:数组类型异常
ArrayIndexOutOfBoundsException:数组越界
InputMismatchException:输入类型错误
5.异常抛出机制
层层递进,先抛出给调用方法的点,然后在抛给调用点。。。。。,最后抛给main()方法,然后main()抛给
java虚拟机,进程终止。
6.异常的使用
异常处理的关键字:try,catch,finally,throw,throws
tyr{
可能出现异常的代码块
}catch(捕捉异常的类型){
执行异常的代码
}catch(){
}finally{
无论try中是否发生异常,也无论catch是否捕获异常,
也不管try和catch中是否有return语句,都一定会执行
(一般用作资源回收)
}
throw程序员手动抛出异常,如果是check的异常,需要在方法声明时,声明该异常类
关键字**throws**运用于方法声明之上,
用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常).
7.自定义异常
**异常类如何定义:**
1. 自定义一个编译期异常: 自定义类 并继承于`java.lang.Exception`。
2. 自定义一个运行时期的异常类:自定义类 并继承于`java.lang.RuntimeException`。
重写message方法,提示错误信息;
结论:1.从Exception类或者它的子类派生一个 子类即可
2.习惯上,自定义异常类应该包含2个构造器:一个是无参构造,另一个是带有详细信息的构造器
3.自定义的异常只能通过throw抛出
4.自定义异常最重要的是异常类的名字,根据名字可以判断异常类型