异常、集合、Collection接口

一、异常

(一)异常的概述

1.概述:再java运行过程中,出现了不正常的情况

2.异常就是一个对象,描述那些和正常情况不相符的异常情况

3.异常也是一种处理异常情况的机制,可以对异常对象进行捕获,或者使程序发生跳转甚至停止运

(二)异常的体系

1.Throwable:可抛出的,是异常体系和错误体系的总父类,所有的异常或者错误都是对象

2.Error:错误,是Throwable的子类,用于描述哪些无法捕获和处理的严重错误,属于非常严重的

错误

3.Exception:异常,是Throwable的子类,用于描述哪些可以被捕获或者处理的特殊情况,属于不

太严重的错误

4.Exception:是java中所有异常类型的总父类,异常类型都是它的子类

5.RuntimeException:运行时异常,是Exception的子类;RuntimeException底下的子类都属于运

行时异常

(三)JVM默认处理异常机制

JVM默认处理异常的方式,一层一层往上抛,JVM接收到之后打印异常信息并结束自己

(四)手动处理异常的方式

1.有两大类的处理方式

(1)异常的声明:某个方法存在编译时异常的时候,编译期就无法通过,需要在出现异常的方法

声明上对可能会发生的异常类型进行声明

(2)异常的捕获:出现了异常之后,可以通过某些代码格式对异常对象进行捕获和处理,此时,

程序出现的异常对象,就不会在往上抛了,而是被捕获下来,我们做出相应的处理后,出现异常代

码之后的代码会继续执行,我们可以自己定义异常的逻辑

2.捕获处理异常的格式

(1)try...catch...

(2)try...catch..catch...catch...

(3)try...catch...finally..

(4)try...finally

(五)try...catch...

1.try:关键字,含义:试一试,可能出现问题的代码放在try模块中

2.catch:关键字,含义:捕获,当真的出现了异常时,问题代码会抛出一个异常对象,可以通过

catch模块将异常对象捕获下来进行处理

3.格式

try { 可能出现异常的代码; } catch (可能出现异常的类型 标识符) { 出现这种异常后的处理手段; }

(六)try...catch..catch...catch...

1.在一段代码中,可能会出现多个异常所以需要准备多种异常处理

2.格式

try { 可能出现异常的代码; } catch (可能出现异常的类型1 标识符1) { 出现这种异常后的处理手段1;

} catch (可能出现异常的类型2 标识符2) { 出现这种异常后的处理手段2; } catch (可能出现异常的类

型3 标识符3) { 出现这种异常后的处理手段3; }

3.注意事项

(1)在多catch模块中,一般子类类型异常声明在上面,父类异常声明在下面

(2)虽然可以直接写Exception,但是对于异常错误无法具体阐述

(3)在JDK7之后,可以对异常类型进行逻辑运算,实际上就是使用【|】来表示多种异常类型可

以用一种处理方式,并且可以结合多catch模块进行使用

(七)try...catch...finally...

1.finally,关键字,含义:最后的,当代码中有必须要执行的代码,可以放在finally表示的模块中

2.格式

try { 可能出现异常的代码; } catch (可能出现异常的类型 标识符) { 出现这种异常后的处理手段; }

finally { 一定会被执行的代码; }

3.作用

(1)如果try中出现了异常,就会抛出异常对象,之后直接尝试使用catch进行捕获,万一没有捕获

到,后续的代码就不会执行。如果某些代码必须执行,就可以将这些代码放入finally中进行执行

(2)作用:一般用于关闭资源

(八)try...finally

1.格式

try { 可能出现异常的代码; } finally { 一定会被执行的代码; }

2.作用

(1)这种格式无法捕获异常,目的就是在于一旦出现异常,就采用默认处理机制,只是在关停虚

拟机之前,需要关闭一些资源,这些资源放在finally模块中

(2)假设如果有两句代码都要执行,两句代码都有可能发生异常,那么第一句代码写在try模块

中,另一句代码写在finally模块中,第一句出现问题,也会保证第二句也执行了

(九)throw关键字

1.抛出,用于抛出一个异常对象

2.程序在运行过程中,发生异常的时候抛出的是一个实实在在的异常对象,我们在实际应用中,如

果代码中哪里有与生活不相符的情况,可以将异常信息封装为一个异常对象,通过throw关键字将

异常对象抛出

3.作用:创建一个异常对象,使用throw关键字抛出,实现了程序的跳转甚至结束

4.说明:当代码正常运行的时候,运行时异常不会发生,就相当于没有任何异常对象,当代码运行

过程中出现了异常情况,才会创建异常对象并且抛出

(十)throws关键字

1.抛出,用于声明一个或多个异常类型

2.使用:在某个方法中,如果存在一些编译时异常,并且这些异常还尚未处理,就会报编译时异

常,我们就必须对编译时异常进行处理:捕获或者声明,如果需要声明编译时异常,就需要在方法

的声明上,参数列表之后,跟上关键字throws,并且注明声明一个或几个异常类型

3.格式

修饰符 返回值类型 方法名称(参数列表) throws 异常类型1, 异常类型2... { 方法体; }

4.注意事项

(1)如果发生的是编译时异常,既可以进行捕获,也可以进行声明

(2)如果发生的是一个运行时异常,不需要声明处理,最多只需要捕获处理,也可以选择不处

理,但是当运行时真正发生了异常的时候,会真的抛出一个异常对象

(3)A方法如果声明了编译时异常,那么B方法在调用A方法的时候也会有编译时异常,此时B方

法就必须针对编译时异常进行处理,要么声明要么捕获,如果A方法捕获了编译时异常,那么后续

在调用这个方法的时候,就不需要再进行异常的处理了

(4)声明异常的原则:尽量声明少的,声明小的异常类型

(十一)throw和throws

1.throw是对已经出现的异常对象进行抛出,throws关键字是对可能出现异常类型进行声明

2.throw是对异常对象实实在在的抛出,一旦使用了throw关键字,就一定会有一个异常对象,

throws关键字是对多个可能出现的异常类型进行声明,即使声明了多个,也有可能一个都不出现

3. throw后面跟一个异常对象,throws后面跟一个或多个异常类型

4.throws声明异常类型的时候,声明尽量声明少的,声明小的异常类型

(十二)  方法重写的补充说明

1.重写:在子父类中,方法名称相同,参数列表相同,与返回值类型有关

2.有关:父类方法返回值是A类,子类重写的方法返回值是A或者A的子类

3.权限修饰符可以越来越大

4.私有方法不能重写

5.如果父类方法声明了A类型的异常,子类重写的方法只能声明A类型异常或者A的子类类型的异常

6.如果父类方法没有声明异常,子类重写的方法中有编译时异常,只能try...catch,不能throws

(十三)自定义异常

1.异常报错时,异常类型就能见名知意的知道是什么类型的问题,但是由于JDK中提供的异常类型

非常有限,为了满足日常开发需求,有时候需要我们自己定义异常的类型

2.创建步骤

(1)创建一个异常类型,类名做到见名知意

(2)需要让自定义类型加入异常体系

①如果自定义类型为运行时异常,就继承RuntimeException

②如果自定义类型为编译时异常,就继承【Exception】

(3)因为所有异常为了方便统一处理,都会使用Throwable中的方法,并且为了以后方便异常对

象的创建和处理异常信息,我们需要在自定义异常类型中重写父类构造

二、集合

(一)概述

也是一个类似数组的统一存储,管理数据的容器,集合只能存储引用数据类型,不能存储基本数据

类型

(二)优势

1.可扩展:底层自动增长,不同我们主动操作进行扩展,避免了不必要的麻烦

2.集合中定义了大量的操作集合的方法,这些方法十分易用

3.集合中存储的都是引用数据类型,以及对象,也利于面向对象编程思想

4.不带泛型的集合可以存储各种数据类型的数据

(三)集合体系

1.分类

(1)单列集合:每一个元素都是一个单独的个体,就类似于数组一样

(2)双列集合:每一个操作都针对一对数据进行,以一对数据为单位

2.单列集合体系:

 3.双列集合体系:

 三、Collection接口

(一)概述和常用方法

1.Collection,接口名,含义:收集,集合

2.单列集合的顶层接口,定义了所有单列集合共性的方法

3.Collection是接口没有办法创建对象,所以为了学习,我们先使用ArrayList子实现类,进行功能

的测试

4.常用方法:

(1)add(Object obj):将obj元素添加到集合中

(2)remove(Object obj):将obj元素从集合中删除

(3)clear():清空集合

(4)isEmpty():判断集合是否为空

(5)contains(Object o):判断是否包含指定元素

(6)size():返回元素的个数

(二)第一种遍历:转数组遍历

1.toArray()方法:将集合中的元素添加到数组中并返回数组

2.调用此方法,将集合存入数组返回数组,遍历数组拿到每一个元素

(三)第二种遍历:迭代器遍历

1.迭代:更新换代,从一个到另一个的过程

2.迭代器:专门用于将集合中的元素,一个到另一个的对象

3.迭代器的获取:集合内部就有一个可以迭代自己的对象,我们直接从集合获取即可

()iterator():返回一个迭代器对象

4.迭代器的使用:获取到迭代器是Iterator接口的实现类对象,再迭代器接口中有相应的方法

(1)hasNext():判断是否有下一个可以迭代的元素,如果有,返回true

(2)next():获取集合中的下一个元素

(3)remove():删除集合中迭代器正在遍历的那个元素

5.注意事项

(1)hasNext()方法只能判断下一个元素是否存在

(2)next()每次只能获取一个元素并且将迭代器指向下一个元素移动一个位置

(3)调用一个hasNext()方法只能调用一次next()方法

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值