本帖最后由 小石姐姐 于 2017-12-22 16:44 编辑
【石家庄校区】JavaEE就业六期day01-day06笔记总结
day01静态的概述和特点static:
- 含义
- 作用
- 修饰成员变量, 成员方法, 使其被该类的所有对象共享
- 修饰类
- 如何调用static修饰的变量和方法
- 静态的特点
- 静态成员被所有对象共享
- 静态成员可以直接使用类名调用
- 静态成员的加载优先于对象
- 静态资源在创建类时加载并初始化(在方法区中)
- 非静态资源在创建对象时才加载并初始化(在堆内存中)
- 静态成员生命周期
静态成员在内存中的位置
- 静态成员的加载时机
day02 面向对象(继承,匿名对象,抽象类)继承的概述- 面向对象的三大特征
- 封装
- 继承
- 多态
- 概念: 从已有类派生出新的类, 已有类称为父类, 派生类称为子类, 这种子类对父类的关系就是继承
- 作用: 如果多个类中有共同的成员, 则可以将其抽取到同一个类中, 将这个类作为父类, 让其他类去继承, 继承后子类就具有了父类非私有的成员
- 关键字: extends
- 定义位置: 子类类名后, 父类类名前
- 格式: public class 子类类名 extends 父类类名 {}
- Java语言中继承的特点
- 支持单继承, 多层继承
- 不支持多继承
- 注意: Java中所有类都直接或间接的继承Object类
- 重写的应用场景 * 当父类方法无法满足子类需求时, 子类可以重写方法
- 注意事项
- 父类私有的方法不能重写
- 子类重写的方法权限必须大于等于父类方法的权限
- 构造方法
this和super
- this
- this(有参或无参): 可以调用本类其他构造方法
- this.成员: 使用当前对象的引用调用成员
- this在子类没有定义成员变量时, 会到父类中寻找父类的变量
- super
- super(有参或无参): 可以调用父类的构造方法
- super.成员: 使用当前对象的父类引用调用父类的方法
- 特点:
- 只能在构造方法的第一行出现
- 两者只能调用其中一个
- 子类构造方法中至少有一个会调用父类的构造方法
- 执行顺序
匿名对象- 概念: 没有名字, 实际上是没有变量引用的对象
- 匿名对象调用成员格式:
- new 类名().成员变量
- new 类名().成员方法()
- 使用场景: 适用于只需要使用对象一次的行为
final关键字
- 概念: 是一个修饰符, 能够修饰类, 方法, 变量
- 作用:
- 修饰类: 不能被继承
- 修饰方法: 不能被子类重写
- 修饰变量: 该变量是自定义常量, 一旦初始化则无法改变其值
抽象类- 什么是抽象: 无法具体描述的, 但是能够表达出共性
- 关键字: abstract, 能够修饰类, 方法
- 作用:
- 抽象类
- 使用abstract修饰的类
- 含有抽象方法的类必须定义为抽象类
- 抽象方法
- 没有方法体的方法: 修饰符 abstract 方法名();
- 抽象方法必须被子类重写
- 抽象类和类的关系
day03 面向对象(接口, 多态)接口的概述- 接口
- 概述: 接口是完全抽象的类, 接口中所有方法都是抽象方法
- 类和接口的关系:
- 接口的作用:
- 为实现类扩展出接口具有的功能
- 弥补Java只能单继承的局限性, 抽象类只能单继承, 而接口可以多实现
- 定义接口:
- 使用 interface关键字替代class
- 格式: 权限修饰符 interface 接口名 {}
- 一个类如何实现接口:
- implements关键字
- 格式: 权限修饰符 class 类名 implements 接口名1, 接口名2... {}
接口的成员特点 - 接口的成员变量
- 必须都是常量(自定义常量)
- 默认是public static final修饰的, 即使你不写或少写某个修饰符
- 接口的构造方法
接口的成员方法
- 必须都是抽象方法
- 不能是static的
- 默认是public abstract修饰, 即使你不写或少些某个修饰符
接口和类的关系* 类和类: 继承关系, 单继承, 多层继承, 不能多继承* 类和接口: 实现关系, 多实现* 接口和接口: 继承关系, 多继承, 多层继承接口的优点 - 通过多实现打破了单一继承的局限性
- 接口可以为实现类提供规则
- 降低程序耦合性(多人分别按照接口开发各自的功能)
多态:
- 一个事物可以具有多种表现形态
- 是面向对象三大特征之一
多态的前提
- 子父类存在继承关系
- 子类有重写父类的方法
- 父类引用指向子类对象:
- 动态绑定:
- 对象调用的成员方法, 是根据程序运行时的具体的类型确定的
多态的成员特点 * * 简化记忆规律: 除了成员方法运行时看右边, 其他无论编译还是运行都看左边 多态的优缺点- 优点
缺点
多态的应用:
- 向上转型: 作为参数类型, 简化代码
- 向下转型: 调用子类对象特有的方法
day04 面向对象(包, 权限修饰符, 内部类)包的作用和特点- 包:
- package, 就是文件夹(目录)
- 作用:分类管理Java文件, 避免重名类的冲突
- 特点:可以有多级, 每层目录就是一级
- 定义包:
- 使用package关键字
- 在类文件第一行: package 目录1.目录2.目录n;
- 权限修饰符
- 4种权限修饰符
- private: 私有的, 仅在本类中可见
- 默认: 在同一个包中可见
- protected: 受保护的, 同一个包中, 或者子类中可见
- public: 项目中都可见
修饰符使用规范:
- 使用public修饰类, 一个Java文件中只能有一个public修饰的类
- 如果一个Java文件中有多个类, 必须是和文件名一样的类名使用public修饰, 其他不能public
- 所有成员变量使用private修饰
- 所有供外界使用的成员方法使用public修饰
- 所有构造方法使用public修饰(不想创建对象的除外)
## 内部类 - 概念: 定义在类中的类
- 分类:
- 成员内部类
- 非静态成员内部类
- 创建内部类的格式:外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
- 导入内部类: import 包名.外部类名.内部类名;
- 静态成员内部类
- 创建内部类的格式: 外部类名.内部类名 对象名 = new 外部类名.内部类名();
- 局部内部类
- 定义位置: 定义在方法中
- 如何使用: 调用方法, 才会出现类的定义, 然后创建对象, 调用方法
- 注意: 类随着方法的调用而定义, 随着方法的调用完毕而消失
- 用的非常非常少
- 匿名内部类
- 定义位置: 方法中或方法形参上
- 格式: (见下方)
- 注意:
- new出来的本质上是父类或父接口的实现类, 该实现类没有名字
- 如果创建的是继承普通类的匿名内部类对象, 则可以选择重写父类方法
- 如果创建的是继承抽象类或实现接口的匿名内部类对象, 则必须重写方法
- 应用场景:
- 作为方法的参数传递
- 作为只使用一次的对象, 避免定义一个类
day05 day06 集合集合的体系结构- 集合:
- 是一个统称, 包含很多集合的实现类. 根据不同数据结构, 提供了不同的集合类
- 数据结构:
- 体系结构:
- 将不同的集合实现类的共性向上抽取出父类, 从而形成一种体系
如何学习一种体系结构:
Collection接口中常用的功能Collection接口
- 是单列集合体系的顶层
- 如何创建Collection对象?
- 本身是接口, 实际使用的是子类对象. 使用多态, Collection c = new ArrayList<>();
- 常用方法
- 增
- boolean add(E e): 向集合中添加元素, 添加成功返回true, 添加失败返回false. 永远能够添加成功
- 删
- boolean remove(Object o): 删除元素中的指定元素, 删除成功返回true, 删除失败返回false
- void clear(): 清空集合中的元素
- 判断
- boolean contains(Object o): 判断集合中是否包含指定元素, 包含返回true, 否则false
- boolean isEmpty(): 判断集合是否为空集合, 即没有元素. 没有元素返回true, 否则false
- 获取个数
- 转换
- Object[] toArray(): 将集合转换为Object[]
迭代器的概述和测试Iterator接口:
- 迭代器
- 作用:
- 获取迭代器:
- 使用集合对象调用Interator<E> iterator()方法
- 成员方法
- boolean hasNext(): 是否有下一个元素
- E next(): 返回下一个元素
- void remove(): 从迭代器指向的 collection 中移除迭代器返回的最后一个元素
并发修改异常:
- 发生原因:
- 迭代器依赖于集合, 相当于集合的一个副本, 当迭代器在操作时, 如果发现迭代器的副本和集合不一样, 则抛出并发修改异常
- 如何避免:
- 方式1: 不使用迭代器
- 方式2: 在使用迭代器遍历时, 使用迭代器的方法修改
List接口
泛型
- 作用:
- 约束集合中元素的数据类型
- 将运行时发生的类型转换异常提前到了编译时期
遍历集合的3种方式
- 普通for循环
- 迭代器
- 增强for循环
- 优点: 快速简便的遍历集合元素
- 缺点: 不能在遍历过程中修改集合, 也没有索引可以使用
List的特点和特有功能- List接口
- 继承自Collection接口. 在java.util包下
- 特点
- 元素有序(存入和取出的顺序一样)
- 有整数的索引
- 元素可以重复
- 特有功能
- void add(int index, E element): 添加元素
- E remove(int index): 删除元素
- E set(int index, E element): 修改元素
- E get(int index): 获取元素
List的子类概述, LinkedList特有功能- List的子类
- ArrayList: 底层数组结构. 查询快, 增删慢
- LinkedList: 底层链表结构. 查询慢, 增删快
- 特有方法, 用于处理开头和结尾的元素
- void addFirst(E e): 将元素添加到开头
- void addLast(E e): 将元素添加到末尾
- E getFirst(): 获取开头的元素
- E getLast(): 获取结尾的元素
- E removeFirst(): 删除第一个元素, 并返回删除的元素
- E removeLast(): 删除最后一个元素, 并返回删除的元素
如何选择: 根据数据结构特点
- 查询多, 增删少, 用ArrayList
- 查询少, 增删多, 用LinkedList
- 不知道, 用ArrayList
常见的数据结构
- 数组
- 特点:
- 长度一旦确定则不可改变
- 有整数索引
- 只能存储同一个数据类型的元素
- 既能存储基本数据类型, 又能存储引用数据类型
- 增删慢, 查询快
- 链表
- 栈
- 队列
|
|