**Throwable:**在程序定义中一般指不期而至的各种情况,如:文件找不到、网络连接失败、非法参数等。异常是一种事件,它发生在程序运行期间、或者代码编译时候,它干扰了正常的程序指令流程继续下去。Java通过API中的Throwable类的众多子类描述各种不同的异常。其中Error与Exception也都是Throwable的两个重要子类。
Error与Exception的区别
**Error:**即错误,是在程序编译时出现的错误,表示在运行应用程序中较严重的问题,一般与代码无关,只能通过修改程序才能修正。一般是JVM(Java虚拟机)的相关问题。如系统崩溃,虚拟机错误,内存不足,动态链接失败等。
例如两个比较常见的错误,一个是Virtual MachineError(Java虚拟机运行错误) 代码在运行时JVM出现的问题;
还有一个是OutOfMemoryError,即JVM不再继续执行操作所需的内存资源。
对于这种错误程序本身是无法恢复和预防的,当这些错误发生时,JVM会选择线程停止。
**Exception:**即异常,是指程序本身可以处理的异常,可以捕获且可能可以恢复。当遇到这类异常时,要尽可能处理异常,增强代码的健壮性,使程序恢复运行。
Exception的两类划分
Exception可以分为CheckedException(UnCheckedException)编译异常(非运行时异常)和RuntimeException运行时异常
**RuntimeException运行时异常:**就是我们在开发测试功能时程序终止,控制台出现异常
常见的有:
ArithmeticException 算数异常
NullPointerException 空指针异常(最容易出现最容易犯的错)
ArrayIndexOutOfBoundsException 索引超出异常
IndexOutOfBoundsException 下标越界异常
ClassCastException 两个类型转换不兼容
NumberFormatException 数字格式异常
对于运行时异常,java编译器不要求必须进行异常捕获处理或者抛出声明,由程序员自行决定。
故该类的异常处理方法有:(下面会对两种方法进行讲解)
- 抛出异常
- 捕获异常:使用try-catch对异常进行捕获
- 修改代码,使代码更健壮
CheckedException(UnCheckedException)编译异常:也叫检查异常或非运行异常,也就是程序在编译时就出现异常。
常见的异常有:
IOException输入或输出异常(即写读异常)
FileNotFoundException文件未被找到
SQLException数据库交互异常
对于非运行时异常,java编译器强制程序员必须进行捕获处理,如果不进行捕获或者抛出声明处理,编译无法通过。
故该类的异常处理方法有:(下面会对两种方法进行讲解)
- 抛出异常
- 捕获异常:使用try-catch对异常进行捕获
捕获异常
使用try和catch关键字,对异常先进行捕获,再进行处理。
try中包围的代码表示这段代码可能会发生异常,如果发生异常,便会被catch捕获到,然后在catch块中对异常进行处理。
下面看一个例子:
public static void main