目录
一.异常
1.1 什么是异常
1.2 为什么要学习异常
1.3 异常的体系
1.5 编译时异常
1.5.1 什么是编译时异常
1.5.2 编译时异常的作用
1.5.3 常见编译时异常
1.6 运行时异常
1.6.1 什么是运行时异常
1.6.2 常见运行时异常
1.6 异常的默认处理流程(RunTimeException)
1.6.1 处理流程
1.6.2 缺点
1.7 编译时异常的处理机制
1.7.1 throws
1.7.2 try...catch...
1.7.3 throws和try...catch...结合
1.7.4 总结
1.8 运行时异常的处理机制
1.9 自定义异常
1.9.1 为什么要有自定义异常
1.9.2 自定义异常的好处
1.9.3 自定义编译时异常的定义步骤
1.9.4 自定义运行时异常的定义步骤
一.异常
1.1 什么是异常
异常是程序编译或执行的过程中可能出现的问题。注意:语法错误不算在异常体系中。
1.2 为什么要学习异常
1. 异常一旦出现了,如果没有提前处理,程序就会退出JVM虚拟机而终止。
2. 避免异常的出现,同时处理可能出现的异常,让代码更健壮。
1.3 异常的体系
Error:系统级别问题,如JVM退出等
Exception:Java.lang包下,称为异常类,它表示程序本身可以处理的问题。
RunTimeException及其子类:运行时异常,编译阶段不会报错。
除RunTimeException之外的所有异常:编译时异常,编译期必须处理的,否则程序不能通过编译。
Error我们并不关心,我们需要掌握的是 Exception
1.5 编译时异常
1.5.1 什么是编译时异常
不是RunTimeException及其子类的异常,编译阶段就报错,必须处理,否则代码不通过。
1.5.2 编译时异常的作用
是担心程序员的技术不行,在编译阶段就爆出一个错误,目的在于提醒不要出错。
1.5.3 常见编译时异常
ParseExcepton:日期解析异常
1.6 运行时异常
1.6.1 什么是运行时异常
直接继承自RunTimeException或者其子类,编译阶段不会报错,运行时可能出现的错误。
1.6.2 常见运行时异常
ArrayIndexOutOfBoundsException:数组越界异常
NullPointerException:空指针异常
ArithmeticException:数学操作异常
ClassCastException:类型转换异常
NumberFormatException:数字转换异常
1.6 异常的默认处理流程(RunTimeException)
1.6.1 处理流程
1. 默认的会在出现异常的那行代码那里自动的创建一个对象:ArithmeticException。
2. 异常会从方法中抛出给调用者,调用者最终会抛出给Jvm虚拟机。
3. 虚拟机接收到异常对象后,首先在控制台输出异常栈信息,然后在出现异常点的地方干掉程序。
4. 后续代码没有机会执行了,因为程序已经死亡。
1.6.2 缺点
默认的异常处理流程并不好,一旦出现异常,程序立即死亡。
1.7 编译时异常的处理机制
编译时异常的处理形式有三种
1.7.1 throws
含义:用在方法上,可以把方法内部出现的异常抛出去给本方法的调用者处理。
优缺点:这种方式并不好,发生异常的方法自己不处理异常,如果异常最终抛出去给虚拟机,将会引起程序死亡。
格式:
优化格式(代表可以抛出一切异常):
1.7.2 try...catch...
含义:监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理。
优缺点:这种方式还可以,发生异常的方法自己独立完成异常的处理,程序可以继续往下执行。
格式:
优化格式:
1.7.3 throws和try...catch...结合
含义:方法可以通过throws将异常抛出给调用者。调用者接收到异常后直接捕获处理。
优缺点:在开发中按照规范来说第三种是最好的;底层的异常抛出去给外层,最外层集中捕获处理。
1.7.4 总结
实际开发中,只要代码能够编译通过,并且功能能够完成,那么每一种异常处理方式都是可以的。
1.8 运行时异常的处理机制
运行时异常编译阶段不会出错,是运行时才可能出错的,所以编译阶段不处理也可以。
按照规范还是处理,建议在最外层集中捕获处理即可。
1.9 自定义异常
1.9.1 为什么要有自定义异常
1. Java无法为这世界上的所有问题提供异常类。
2. 如果企业想通过异常的方式来管理自己的某个业务问题,就需要自定义异常类了。
1.9.2 自定义异常的好处
1. 可以使用异常的机制管理业务问题,如提醒程序员注意。
2. 一旦出现Bug,可以用异常的形式清晰地指出出错的地方。
1.9.3 自定义编译时异常的定义步骤
1. 定义一个异常类继承Exception。
2. 重写构造器。
3. 在出现异常的地方throw new 对象抛出。
1.9.4 自定义运行时异常的定义步骤
1. 定义一个异常类继承RunTimeException。
2. 重写构造器。
3. 在出现异常的地方throw new 对象抛出。