异常、容器和泛型的简单介绍

本文只是作者学习过程中的一些笔记总结。若记录有误,可以在评论区指出~

本文旨在介绍一些异常、容器、泛型的基本应用,深入的原理并不涉及~


目录

一、异常

二、容器

三、泛型


一、异常

看到“异常”二字,你能想到什么?什么是异常?通俗来说,就是程序执行时遇到的不正常情况。

我们可以把异常事件分类为以下两种:

  • Error错误
  • Exception异常

而异常又分为以下两种:

  • 运行时异常【运行时发现的】
  • 编译时异常【编译时发现的】

 常见的异常类型有下图这些:

 其实归结来说,最主要的异常就是运行时异常,其余的异常都较为容易处理,而运行时异常的原因通常是作者程序的逻辑不合理或者不完善,导致了可能会出现的错误结果,这就是我们最需要处理的异常。

比如ArithmeticException就是算术异常,通常在程序出现除以0的情况出现。

比如下图这个程序:

这个程序的目的是输入两个数字,然后两数相除。

这个程序本身是没有任何问题的,但是如果你是这样输入的:

 

你看,除数为0时,这个程序就没法正常运行,然后程序就抛出了一个算术异常的信息,并且终止了程序继续运行。

虽然这个程序编译时没有报错,但是在运行时如果遇到不合理的输入,就会抛出异常信息然后终止。

这是个很严重的事情吗?看起来程序遇到问题,然后终止了是个很正常的事情。但是如果我们写一个很大的项目,程序在一个不起眼的地方,因为一个运行时错误就彻底终止,是得不偿失的,我们需要让程序继续运行,并且让程序告诉使用者他的输入有误。

因此,我们就有了所谓的异常处理机制。 

如下图所示的try-catch-finally语句:

简单理解就是,程序运行try当中的语句,如果程序遇到异常,就开始执行catch当中的语句。

finally语句可有可无,无论程序是否正常运行,最后都会执行finally中的语句。

以上就是一种处理异常的方式。

那还有另一种方式就是抛出异常,即程序不必在当前方法中处理,我们可以抛给上一层调用该方法的调用者。

即有点时候,某个语句可能生成异常,但是无法确定如何处理,则此方法应显示地声明抛出异常,表示该方法不对异常进行处理,而由调用者负责处理。【其实可以简单理解为甩锅给上层】 

在编写程序时,可以扩展Exception类定义自己的异常类,我们叫做自定义异常类。

即一个方法在声明时可以使用throws关键字声明要产生的若干个异常 ,并且在方法体中给出产生异常的操作。

 

注意!声明时用的是关键字throws,而具体抛出异常时用的是throw关键字。 

二、容器

我们也把容器叫做框架,大概就是下图这样的一个体系:

 

这里就是一些常用的容器了。

除了这些以外,Map图也属于集合框架里。

我们为什么要使用集合呢?

  1. 因为集合可以动态保存任意多个对象,使用方便;
  2. 同时,集合提供了一系列方便的操作对象的方法:add增、remove删、set改、get查
  3. 并且运用集合,可以使我们的代码变得更加地简洁。

 简单介绍一下这几种容器,实际上这些容器和我们学过的数据结构没什么区别,这里只做一些简单介绍,不详尽展开对于集合框架的论述,本文只致力于了解入门。如果有数据结构的学习,对于这块知识,可以较为轻松地掌握。在使用上,也和C++的容器差别并不大。

List

  1. List集合有序
  2. List集合支持索引
  3. 可以按序号存取
  4. List接口的常用实现类有:ArrayList、LinkedList和Vector

 ArrayList和Vector都是可变数组,ArrayList没有线程同步,安全性上不如Vector,但效率上则更高一点。LinkedList使用双向链表实现,可以添加任意元素,线程不安全,但是元素添加删除都很方便,不过不利于查改。

Set

  1. 无序图,没有索引
  2. 不允许重复元素,最多包含一个null

HashSet 

  1. HashSet的底层是HashMap,HashMap的底层是数组+链表+红黑树。
  2. 添加一个元素时,先得到hash值,转成一个索引值
  3. 找到存储数据表table,看这个索引位置是否已经存放的有元素
  4. 如果没有就直接加入
  5. 如果有,则调用equals比较,相同放弃添加,不同则添加到最后

Collections工具类提供了许多静态方法,可以对集合进行排序和查询修改等。

如reverse(List)反转元素、shuffl(List)随机排序、sort(List)升序排序、swap(List,int,int)将指定i处和j处的元素进行交换等等……

三、泛型

泛型的目的是为了建立更具有类型安全的集合框架,例如链表、散列表等数据结构。

我们使用 class 名称 <泛型列表> 来定义一个类,这种类叫做泛型类。

泛型类和普通类类似,由成员变量和方法构成。

用这些泛型类来建立数据结构时,不必进行强制类型转换,类型会自动被检测,使代码更加安全。

我们通常会把容器和泛型混在一起使用,这样会让我们的容器处理起来更方便与合理。


以上就是一些简单的学习笔记,仅是作为一个入门的前期了解,更深入的知识还需要额外去学习和实践。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值