java的异常体系

70 阅读2分钟

一、为什么要引入异常?

可以识别代码的错误响应机制,使代码更加的健壮,提高用户的体验。

二、异常体系

image.png

三、异常的分类

1.编译时异常(受检异常):

除RuntimeException之外的异常在编写代码时就出现错误。

2.运行时异常(非受检异常):

RuntimeException及其子类异常只有在代码在运行才会报错。

四、处理异常的三种方式

1.throws声明异常

		用在方法上,目的是为了告诉调用者调用该方法有可能会发生什么异常
		Step1.在方法上声明异常,如果是运行时异常可以省略
		Step2.要求方法调用者自己处理异常
		Step3.如果方法调用者没有处理,那么继续交给虚拟机处理

2.throw抛出异常

		手动创建异常对象并抛出使用抛出异常的原则
应该抛出足够明确的异常,让使用者能够见名知意
			throw new 异常();

throws与throw对比

		1throw 在方法体内使用,throws 在方法声明上使用;
		2.throw 后面接的是异常对象,只能接一个。throws 后面接的是异常类型,可以接多个,用逗号隔开;

3.try...catch捕获异常

		好处
			可以根据捕获不同的异常进行分别处理
		特点
			只有在try中发生异常,才会进入catch
			一旦进入catch,try中没有执行的代码也不会被执行
		使用方式
			1.吞没异常,什么都不处理,可以使程序继续运行
			2.只打印异常信息,程序仍可继续运行
			3.配合throw 或者return关键字,处理异常,并使程序退出
			4.捕获多个异常按不同需求处理,但是多个异常有父子关系,父异常必须在子异常后面
                            
                            
                            

五.异常父类throwable的成员方法

getMessage:显示异常消息
toString:显示异常类型+异常消息
printStackTrace:在控制台上打印完整的异常栈,包括异常行数+异常类型+异常消息(最常用,便于分析异常)

6.自定义异常

 Java提供了一些异常,但是Java官方无法为这个世界上的全部问题都提供异常类,自己的某种问题,想通过异常来表示,那就需要自己来定义异常类了。
   步骤
	Step1:定义异常类,类名必须见名知意
	Step2:写继承关系(可以继承Exception,但大多都继承RuntimeException)
	Step3:生成构造器,一般空参有参都生成
	Step4:按照手动处理异常的方法,声明、抛出或者捕获你所自定义的异常即可