A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 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 面向对象(接口, 多态)接口的概述
  • 接口
    • 概述: 接口是完全抽象的类, 接口中所有方法都是抽象方法
  • 类和接口的关系:
    • 类实现接口
    • 实现接口的类称为xx接口的实现类
  • 接口的作用:
    • 为实现类扩展出接口具有的功能
    • 弥补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
  • Object类

    • 是类层次结构的根类
    • 所有类都直接或间接继承了Object类
  • 成员方法 * String toString(): 返回对象的字符串表示方式 * 重写toString()的作用: 改变对象的字符串显示方式 * boolean equals(Object o): 比较两

    • 类的字节码对象注意点:
      • 同一个类的字节码对象只有一个, 地址值也是相同的
      • 区分Class和class, 前者是类, 后者是关键字

  • System类

    • java.lang包下, 不用导包
    • 常用静态方法
      • static void arrayCopy(Object src, int srcPos, Object dest, int destPos, int length): 复制数组
      • static long currentTimeMillis(): 返回当前系统时间的毫秒值, 从1970-01-01 00:00:00
      • static void exit(int status): 终止虚拟机的运行. 传入0是正常退出, 非0是异常退出

  • Date类
    • 注意导包: java.util.Date
    • 表示特定的瞬间
    • 构造方法
      • Date Date(): 创建Date对象, 并表示当前系统时间
      • Date Date(long timestamp): 创建Date对象, 使用指定的时间
    • 成员方法
      • String toLocalString(): (已过时)转换为本地时间格式的字符串
      • void setTime(long time): 设置Date对象的时间
      • long getTime(): 获取Date对象中保存的时间毫秒值.

  • SimpleDateFormat类
    • 作用:
      • String转Date
      • Date转String
    • 构造方法
      • SimpleDateFormat(String pattern): 创建SimpleDateFormat对象, 并设置指定的格式
    • 常用2个成员方法
      • String format(Date date): 格式化Date对象返回字符串
      • Date parse(String source): 将字符串解析为Date对象

  • Calendar类

    • 替代Date类
    • 创建对象
      • static Calendar getInstance(): 获取日历对象
    • 静态字段: 表示时间的某个部分
      • Calendar.YEAR: 年份
      • Calendar.MONTH: 月份. 注意月份数值是0-11
      • Calendar.DAY_OF_MONTH: 日期
      • Calendar.HOUR: 小时(12小时制)
      • Calendar.HOUR_OF_DAY: 小时(24小时制)
      • Calendar.MINITE: 分钟
      • Calendar.SECOND: 秒
    • 成员方法
      • get(时间字段): 获取指定的时间部分
      • set(时间字段, 指定数值): 使用指定数值设置指定的时间部分
      • add(时间字段, 增加的时间值): 根据时间字段的单位增加指定的时间值, 如时间字段是天, 增加n天, 时间字段是秒, 增加n秒. 减少用负数


    • 包装类的默认值是null
    • 自动装箱
      • 基本数据类型可以自动转换为包装类
      • 举例: Integer i = 10; 相当于Integer i = new Integer(10);或Integer i = Integer.valueOf(10);
    • 自动拆箱
      • 包装类可以自动转换为基本数据类型
      • 举例: int a = i.intValue();
    • 自动装箱拆箱的应用场景
      • 集合存储基本数据类型就是自动装箱, 本质上集合中存储的都是引用数据类型

  • 正则表达式
    • 概念: 一种用于匹配字符串的规则
    • String类
      • boolean matches(String regex): 是否匹配指定的正则
      • String[] split(String regex): 按照正则表达式分割字符串


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
      • 获取个数
        • int size(): 获取集合中元素的个数
      • 转换
        • Object[] toArray(): 将集合转换为Object[]


    迭代器的概述和测试
  • Iterator接口:

    • 迭代器
    • 作用:
      • 提供遍历集合的安全方式
    • 获取迭代器:
      • 使用集合对象调用Interator<E> iterator()方法
    • 成员方法
      • boolean hasNext(): 是否有下一个元素
      • E next(): 返回下一个元素
      • void remove(): 从迭代器指向的 collection 中移除迭代器返回的最后一个元素

  • 并发修改异常:

    • 发生原因:
      • 迭代器依赖于集合, 相当于集合的一个副本, 当迭代器在操作时, 如果发现迭代器的副本和集合不一样, 则抛出并发修改异常
    • 如何避免:
      • 方式1: 不使用迭代器
      • 方式2: 在使用迭代器遍历时, 使用迭代器的方法修改

  • List接口

    • 列表, 是Collection的子接口
    • 特点:

      • 元素存取有序, 元素可以重复, 有索引

        • 使用迭代器对象中的修改方法


  • 泛型

    • 作用:
      • 约束集合中元素的数据类型
      • 将运行时发生的类型转换异常提前到了编译时期

  • 遍历集合的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
  • 常见的数据结构

    • 数组
      • 特点:
        • 长度一旦确定则不可改变
        • 有整数索引
        • 只能存储同一个数据类型的元素
        • 既能存储基本数据类型, 又能存储引用数据类型
        • 增删慢, 查询快

    • 链表
      • 特点:
        • 增删快, 查询慢


      • 特点: 先进后出, FILO
    • 队列
      • 特点: 先进先出, FIFO



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马