Java基础笔记八 枚举

霸气de小男生 提交于 2019-11-27 05:35:36

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代码段中的逻辑将不会执行。

语法注意事项:

  1. try代码段不能独立存在,后面必须跟上catch或者finally
  2. 可以使用多个catch,捕获多种异常
    1. 如果多个catch中捕获的异常类型没有继承关系,则先后顺序无所谓。
    2. 如果多个catch中捕获的异常类型有继承关系,则子类异常在前,父类异常在后。
  3. 可以在一个catch中,使用|将多种异常拼接在一起
    1. 这时候多个异常的先后顺序无所谓。
    2. 这种情况下,不允许出现父类异常。

如果一个try代码段中出现了很多种异常,并且,多种异常的处理方式完全相同。则此时,可以直接catch父类异常。

9.4. finally

finally: 用在try或者catch后面。无论try中的代码是否出现了异常,finally中的语句始终会执行。

在finally中,常常会做 资源释放、关闭流… 等工作

9.5. throw和throws关键字

我们可以在程序中实例化一个异常类的对象,但是一个异常对象被实例化完成后,没有任何意义。只有当抛出这个异常的时候,这个异常才会生效,会终止程序运行。

throw: 配合异常对象使用,使这个异常生效。

throws: 写在方法的声明部分,在参数列表之后,方法体之前。用来声明这个方法中有什么异常。

最重要的作用:表示这个方法中出现的异常,可以不去处理。由调用方处理。

9.6. 自定义异常

当我们需要使用异常的时候,系统提供的异常类已经不能满足我们的需求,那么我们就需要自定义异常。

其实,自定义异常,就是继承自Exception类或者RuntimeException类,做一个子类。

  • 继承自Exception类的异常,是编译时异常。
  • 继承自RuntimeException类的异常,是运行时异常。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!