8. 枚举
8.1. 什么是枚举?为什么要用枚举?
枚举,也是一种自定义的数据类型。这种类型和类很像,但是比类多个一种成员。枚举中可以写枚举元素。
使用枚举,可以限定某些变量的取值范围。
例如:在前面的需求中,我们常把"性别"设置为char类型。但是,如果将性别设置为字符型,那么,这个变量可以取的值,将会非常多。
char gender = ‘男’; gender = ‘女’;
gender = ‘a’; gender = ’ '; gender = ‘l’; gender = ‘.’;
再例如:如果需要定义一个变量,来表示月份,这个变量的类型应该是?
int month = 1000;
什么情况下使用枚举
当某些变量的取值范围,在有限的几个值中去取。这种情况下,就可以设置为枚举类型。
使用枚举的好处
可以大幅度的提高代码的可读性。
8.2. 枚举的定义与基本的使用
定义枚举,需要使用关键字 enum
,其他的语法,与类完全相同。
在枚举中,可以写出这个枚举类型的变量,可以取到的每一个值。这些值,就是枚举的元素。
9. 异常
9.1. 异常的体系
什么是异常?
异常,指的是程序在编译、运行的过程中遇到的种种不正常的情况,导致程序无法正常的编译、运行。
异常,在Java中,是有专门的类来表示的。
Throwable : 是错误和异常的根类
Error : 错误信息,是发生在jvm虚拟机上的,程序无法处理的非正常情况。
Exception : 异常,可以在程序中进行处理。
9.2. 异常的分类
异常,可以分为编译时异常和运行时异常。
其实,异常的分类,分两种:
Runtime Exception 和 Non-Runtime Exception
准确来说,应该是运行时异常, 和 非运行时异常。
但是,因为非运行时异常,是发生在程序编译的时候,如果不去处理,会导致程序无法正常编译。因此,习惯上来讲,会将非运行时异常,称为 编译时异常。
一个未经处理的运行时异常,会导致程序运行终止。
一个未经处理的编译时异常,会导致程序编译失败。
9.3. 异常的基本处理方式 try-catch
基础语法
try {
// 可能会出现异常的代码
}
catch (可能出现的异常类型 标识符) {
}
执行逻辑:
如果try中的代码出现了异常,则会和catch进行匹配。
如果可以匹配上,表示这个异常已经被捕获处理了,此时,将不再终止程序的运行。同时,catch代码段中的逻辑会执行。
如果匹配不上,此时这个异常依然没有被处理,可以继续终止程序。同时catch代码段中的逻辑将不会执行。
语法注意事项:
- try代码段不能独立存在,后面必须跟上catch或者finally
- 可以使用多个catch,捕获多种异常
- 如果多个catch中捕获的异常类型没有继承关系,则先后顺序无所谓。
- 如果多个catch中捕获的异常类型有继承关系,则子类异常在前,父类异常在后。
- 可以在一个catch中,使用
|
将多种异常拼接在一起- 这时候多个异常的先后顺序无所谓。
- 这种情况下,不允许出现父类异常。
如果一个try代码段中出现了很多种异常,并且,多种异常的处理方式完全相同。则此时,可以直接catch父类异常。
9.4. finally
finally: 用在try或者catch后面。无论try中的代码是否出现了异常,finally中的语句始终会执行。
在finally中,常常会做 资源释放、关闭流… 等工作
9.5. throw和throws关键字
我们可以在程序中实例化一个异常类的对象,但是一个异常对象被实例化完成后,没有任何意义。只有当抛出这个异常的时候,这个异常才会生效,会终止程序运行。
throw: 配合异常对象使用,使这个异常生效。
throws: 写在方法的声明部分,在参数列表之后,方法体之前。用来声明这个方法中有什么异常。
最重要的作用:表示这个方法中出现的异常,可以不去处理。由调用方处理。
9.6. 自定义异常
当我们需要使用异常的时候,系统提供的异常类已经不能满足我们的需求,那么我们就需要自定义异常。
其实,自定义异常,就是继承自Exception类或者RuntimeException类,做一个子类。
- 继承自Exception类的异常,是编译时异常。
- 继承自RuntimeException类的异常,是运行时异常。
来源:https://blog.csdn.net/a1265262132/article/details/99460243