本文只是作者学习过程中的一些笔记总结。若记录有误,可以在评论区指出~
本文旨在介绍一些异常、容器、泛型的基本应用,深入的原理并不涉及~
目录
一、异常
看到“异常”二字,你能想到什么?什么是异常?通俗来说,就是程序执行时遇到的不正常情况。
我们可以把异常事件分类为以下两种:
- Error错误
- Exception异常
而异常又分为以下两种:
- 运行时异常【运行时发现的】
- 编译时异常【编译时发现的】
常见的异常类型有下图这些:
其实归结来说,最主要的异常就是运行时异常,其余的异常都较为容易处理,而运行时异常的原因通常是作者程序的逻辑不合理或者不完善,导致了可能会出现的错误结果,这就是我们最需要处理的异常。
比如ArithmeticException就是算术异常,通常在程序出现除以0的情况出现。
比如下图这个程序:
这个程序的目的是输入两个数字,然后两数相除。
这个程序本身是没有任何问题的,但是如果你是这样输入的:
你看,除数为0时,这个程序就没法正常运行,然后程序就抛出了一个算术异常的信息,并且终止了程序继续运行。
虽然这个程序编译时没有报错,但是在运行时如果遇到不合理的输入,就会抛出异常信息然后终止。
这是个很严重的事情吗?看起来程序遇到问题,然后终止了是个很正常的事情。但是如果我们写一个很大的项目,程序在一个不起眼的地方,因为一个运行时错误就彻底终止,是得不偿失的,我们需要让程序继续运行,并且让程序告诉使用者他的输入有误。
因此,我们就有了所谓的异常处理机制。
如下图所示的try-catch-finally语句:
简单理解就是,程序运行try当中的语句,如果程序遇到异常,就开始执行catch当中的语句。
finally语句可有可无,无论程序是否正常运行,最后都会执行finally中的语句。
以上就是一种处理异常的方式。
那还有另一种方式就是抛出异常,即程序不必在当前方法中处理,我们可以抛给上一层调用该方法的调用者。
即有点时候,某个语句可能生成异常,但是无法确定如何处理,则此方法应显示地声明抛出异常,表示该方法不对异常进行处理,而由调用者负责处理。【其实可以简单理解为甩锅给上层】
在编写程序时,可以扩展Exception类定义自己的异常类,我们叫做自定义异常类。
即一个方法在声明时可以使用throws关键字声明要产生的若干个异常 ,并且在方法体中给出产生异常的操作。
注意!声明时用的是关键字throws,而具体抛出异常时用的是throw关键字。
二、容器
我们也把容器叫做框架,大概就是下图这样的一个体系:
这里就是一些常用的容器了。
除了这些以外,Map图也属于集合框架里。
我们为什么要使用集合呢?
- 因为集合可以动态保存任意多个对象,使用方便;
- 同时,集合提供了一系列方便的操作对象的方法:add增、remove删、set改、get查
- 并且运用集合,可以使我们的代码变得更加地简洁。
简单介绍一下这几种容器,实际上这些容器和我们学过的数据结构没什么区别,这里只做一些简单介绍,不详尽展开对于集合框架的论述,本文只致力于了解入门。如果有数据结构的学习,对于这块知识,可以较为轻松地掌握。在使用上,也和C++的容器差别并不大。
List
- List集合有序
- List集合支持索引
- 可以按序号存取
- List接口的常用实现类有:ArrayList、LinkedList和Vector
ArrayList和Vector都是可变数组,ArrayList没有线程同步,安全性上不如Vector,但效率上则更高一点。LinkedList使用双向链表实现,可以添加任意元素,线程不安全,但是元素添加删除都很方便,不过不利于查改。
Set
- 无序图,没有索引
- 不允许重复元素,最多包含一个null
HashSet
- HashSet的底层是HashMap,HashMap的底层是数组+链表+红黑树。
- 添加一个元素时,先得到hash值,转成一个索引值
- 找到存储数据表table,看这个索引位置是否已经存放的有元素
- 如果没有就直接加入
- 如果有,则调用equals比较,相同放弃添加,不同则添加到最后
Collections工具类提供了许多静态方法,可以对集合进行排序和查询修改等。
如reverse(List)反转元素、shuffl(List)随机排序、sort(List)升序排序、swap(List,int,int)将指定i处和j处的元素进行交换等等……
三、泛型
泛型的目的是为了建立更具有类型安全的集合框架,例如链表、散列表等数据结构。
我们使用 class 名称 <泛型列表> 来定义一个类,这种类叫做泛型类。
泛型类和普通类类似,由成员变量和方法构成。
用这些泛型类来建立数据结构时,不必进行强制类型转换,类型会自动被检测,使代码更加安全。
我们通常会把容器和泛型混在一起使用,这样会让我们的容器处理起来更方便与合理。
以上就是一些简单的学习笔记,仅是作为一个入门的前期了解,更深入的知识还需要额外去学习和实践。