周学习内容概况
- 抽象类
- 多态
- 泛型、内部类、匿名内部类
- 集合
- 继承
- 可变参
- 异常
抽象类abstract
- 使用abstract修饰的类称为抽象类
抽象类不允许创建对象
抽象类主要用于继承 - 使用abstract修饰的方法称为抽象方法
抽象方法不能有方法体
抽象方法主要用于重写
作用
限制规定子类必须实现某些方法,但不关注实现细节,避免子类设计的随意性
注意
- 包含抽象方法的类必须定义为抽象类
- 抽象类中可以不包含抽象方法,抽象类中可以包含普通方法
子类继承抽象方法后
- 子类实现(重写)父类的所有抽象方法,把子类定义为普通类
- 子类实现父类部分抽象方法,把子类定义为抽象类
- 子类不实现父类的抽象方法,把子类定义为抽象类
多态
不同类对象对同一事物做出的不同响应
多态的三个必要条件
- 必须要有继承(继承类或接口)
- 必须要有方法的重写
- 父类型的引用指向子类型的空间
作用
提高代码的重用性
引用数据类型的转换
-
引用数据类型的转换只存在与父子类之间,引用数据类型转换,只能A空间转A类对象
-
父类的引用可以直接保存子类的空间。
-
子类转父类发生自动类型转换。
父类转子类时,因为子类可能扩展了父类没有的属性和方法,所以可能发生错误,所以需要强制转换。 -
强制转换只能把指定对象转换回此对象,不能把其他对象转换成此对象。
匿名内部类
- 创建了一个父类的引用
- 创建了一个没有名字的类
- 这个没有名字的类继承了某个接口
- 同时实现了这个接口中的抽象方法
- 创建了这个没有名字类的对象
- 父类型的引用指向了子类型的空间
异常处理
异常的分类
- 运行时异常:由于编程错误导致(建议程序员修改bug)
- 非运行时异常:由于外界因素导致(建议捕获,防止程序奔溃退出)
异常的捕获机制
try…catch…finally
try{
//可能抛出异常的语句
}catch(Exception){
//捕获异常,输出异常信息
}finally{
//无论有没有抛出异常,都会执行,通常用来清理资源,例如关闭socket,关闭流,关闭数据库连接等等
}
throw
抛出异常,只是把异常抛给上一级或者抛给系统
- throw 抛出异常对象
- throws 可能抛出的异常类型
集合
list
List是元素有序并且可以重复的集合,被称为序列
List可以精确的控制每个元素的插入位置,或删除某个位置元素
ArrayList、LinkedList是List的两个实现类
集合set
- 概念
Set父接口为Collection,很多方法是继承过来的,所有很多方法与List相同
它不允许出现重复元素
不保证集合中元素的顺序
允许包含值为null的元素,但最多只能有一个null元素
HashSet、TreeSet是Set的两个实现类, 两个类的方法相同,但是方法运行后结果有的不同
-
HashSet和TreeSet对比
-
相同点
没有下标
不可手动排序
元素顺序与加入顺序无关
同一个元素不可加入多次 (所以可以用来去重)
遍历方式相同
- 不同点
HashSet:元素顺序不可测,与数学上元素集合概念相同
TreeSet:元素顺序与元素的排序规则有关
HashSet对元素无要求,而TreeSet对元素有要求,即要求元素必须有排序规则。
元素排序规则与List中元素排序规则是相同的
HashSet:底层是算法是Hash算法:所以查询速度快,但是没有ArrayList快
TreeSet:底层算法是树: 查询慢,插入快些。
集合Map
- 概念
Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value。
键(key值)不可重复,value值可以
每个键最多只能映射到一个值
Map支持泛型,形式如:Map<K,V>
-
HashMap与TreeMap对比
-
相同点
方法相同(但方法运行后结果可能不同)
元素是键值对
没有下标
不可手动排序
元素顺序与加入顺序无关
同一个元素不可加入多次,键相同则认为是同一元素,与值无关
- 不同点
HashMap:元素顺序不可测
TreeMap:元素顺序与元素的键的排序规则有关
HashMap对元素无要求,而TreeMap对元素的键有要求,即要求元素的键必须有排序规则
HashMap:底层是算法是Hash算法:所以查询速度快,但是没有ArrayList快
TreeMap:底层算法是树: 查询慢,插入快些
###集合的遍历
- for循环遍历
- foreach遍历
//foreach的语法
Set<String> set = new TreeSet<>();
for (String s : set) {
System.out.print(s + " ");
}
System.out.println();
- 迭代器遍历
Set<String> set = new TreeSet<>();
// 从集合中取出迭代器
Iterator<String> iterator = set.iterator();
// 判断是否能有下一个元素
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");//输出下一个元素
}