这是第4周了,JAVA的基础阶段还有两周时间不到就结束了,今天将集合基本学完,有了LIST跟SET集合之后,学习MAP集合就简单许多了。时间不等人,沉下心来。
Map接口:下面的实现类都实现了存储键值对的特点
存储特点: key无序,且唯一;value允许重复; 如果key重复,那么value会覆盖之前的。
Map的实现类HashMap: 通过hash算法实现存储。
通过源码分析可知:具体实现与HashSet一致的,因为HashSet就是通过HashMap完成的存储
Map集合进行遍历的是两个值,不能直接使用增强for遍历
//-------间接遍历: keySet-------- Setkeys = map.keySet(); for(String key:keys) { System.out.println(key+"-->"+map.get(key)); } //-------间接遍历: entrySet-------- Set > set = map.entrySet(); for(Entry entry:set) { System.out.println(entry.getKey()+"==>"+entry.getValue()); }
TreeMap: Map接口的实现类:二叉树算法实现存储
存储特点: key可排序,唯一 如果key重复,新的value替换旧的
说明:和TreeSet类似,因为TreeSet的具体实现是通过TreeMap完成的
HashMap VS Hashtable
HashMap: 不安全,但效率高的集合,key和value可以使用null
Hashtable:线程安全,效率低的集合,key和value都不能使用null
Properties: 是Hashtable的子类,常用于加载配置信息中
HashMap VS TreeMap
从执行效率方面考虑,肯定选择HashMap效率更高
如果需要实现排序,才选择TreeMap
今日份作业:
DAY_18
异常概述:程序的不正常执行
处理异常的必要性:如果不处理,程序则会中断
异常的分类:
- Throwable:错误与异常的父类,子类有Error,Exception
- Error: 错误异常,例如硬件问题,JVM异常,程序员无法处理
- Exception:一般性异常,程序员能处理,包含两个子类:运行时和编译时异常
运行时异常:非受检异常,运行时出现问题,直接奔溃 例如:类型转换异常,下标越界,空指针异常,算数异常,输入不匹配异常,数字格式异常
编译时异常:受检异常, 编译时报错,需要再一次处理
异常的传递:当方法的多级调用出现异常的情况,出现异常,则会向上传递,如果每个层次都没有处理,则会奔溃。
运行时异常的处理:捕获异常
捕获:隔离异常,使得后续的程序正常执行
try{
//视图抓取有异常的代码..
}catch(Exception e) //有问题则捕获--隔离了
//打印异常
编译时异常的处理:
- 抛出:弃之不管,抛给上一级。一直上抛不处理程序遇到异常就崩溃。
- 捕获:隔离异常,使得后续的程序正常执行
传递中的异常处理:
- 在方法实现中的捕获,在方法捕获后面的代码不受影响
- 在main方法中的捕获,仅仅只是main方法后面不会受影响
finally:最终的,搭配try或try.catch去使用的,不论能否捕获住,最终都会执行finally中的代码
finay的优先级非常高,甚至比return还要高。
finally的用法:
当程序是死循环时,后面是不能执行代码的,但是我们可以使用tryfinally,将后续要执行的代码放到finally中即可。
try {
while(true) {
System.out.println("一直执行的...");
}
} finally {
System.out.println("最后执行的...");
}
finally应用场景:
- io流的关闭资源
- 数据库资源关闭
- 锁资源释放
自定义异常: 抛出单个对象,往往用在自定义异常中,一般项目中可以根据需求设定异常类继承Exception或RuntimeException。
声明异常中的重写:
- 满足之前重写的要求:返回值类型,方法名,参数类型和父类完全一致,权限大于等于父类
- 再加入异常声明
- 注意:子类声明的异常不能大于父类
今日份作业:



