自定义异常
只需要继承异常类
如果需要添加自定义的异常信息,需要调用异常父类的构造方法
Exception类的构造方法:
Exception() --默认构造方法
Exception(String message) --构造方法,形参是异常信息
Exception(String message,Throwable t) --添加其他异常,错误,Throwable的对象
集合框架
两种类型的容器:一种是集合,一种是图
数组:存储很多元素
不足:长度是固定的,存储的个数也是固定的
操作的方法,依赖其他类:Arrays,System中的方法操作数组
集合:长度是可变的,存储的元素也是动态个数
存储各种类型的数据
集合本身有很多操作自己的方法
集合的种类有很多,数据存储方式很多
集合:存储元素的容器
Collection接口,集合的父级接口,定义了集合的特点.
集合有三种子类接口:List,Set
List类型的集合的实现子类:
ArrayList,LinkedList,Vector.
Set类型的集合的实现子类:
HashSet,TreeSet
Collection 接口
Java.util.Collection 接口 集合父类接口
List 类型集合接口的特点:有序(有下标),存储的元素是可以重复
三种实现子类:ArrayList,LinkedList,Vector.
ArrayList:数据存储方式 : 数组;多线程不安全
LinkedList:数据存储方式:链表
Vector:数据存储方式:数组;多线程安全
迭代器:java.util.Iterator
迭代器对集合进行遍历,循环.不用暴露集合内部结构,又可以让外部代码访问集合内部的数据(解除耦合度,互相联系更少)
怎么理解使用迭代器可以降低耦合度?
- 直接把操作代码与集合进行关联.如果集合发生变化,操作代码也会受到影响,这样的耦合度非常高
- 有迭代器后,业务代码与集合分离.业务代码与集合统一生产的迭代器关联,集合可以生成统一的迭代器,耦合度降低了很多,业务代码和集合相互不影响,方便开发和维护
比枚举更好的,不同点:
- 方法名改进了,枚举的方法名比较长
- 迭代器在迭代的过程可以从集合中移除元素
Collection 接口
是集合的父类接口
特点:存储一组重复,无序的对象
List接口是Collection接口中一种有序的集合
特点:通过下标控制List中的元素,允许重复的元素
Set接口是Collection 接口中一种无序集合
特点:存储一组唯一,无序的对象
HashSet是Set接口的实现子类
存储方式:hash表存储元素:对象的hashCode()方法
特点:存储唯一,无序的一组对象
TreeSet是Set接口的实现子类
存储方式:树形结构
特点:存储唯一,无序的一组对象
但可实现排序功能
泛型
按照泛型的规则存储泛型类型的元素
实现TreeSet排序
自然排序接口Comparable:从小到大排序
集合实现自然排序接口后,集合中的元素会按照排序方式
- 集合的规定泛型是已经实现了自然排序接口,自动按照自然排序去排.比如: Integer,String,Byte;不用自定义实现自然排序接口
- 自定义的类没有实现自然排序.需要实现自然排序接口Comparable
自然排序Comparable接口
目的:实现ComparabTo()方法,按照自定义逻辑进行排序
对象1.CompareTo(对象2):比较对象1与对象2的顺序. 返回值是:-1 0 1
负整数,零或正整数,根据此对象是小于、等于还是大于指定对象