学习周报3

周学习内容概况

  • 抽象类
  • 多态
  • 泛型、内部类、匿名内部类
  • 集合
  • 继承
  • 可变参
  • 异常

抽象类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() + " ");//输出下一个元素
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值