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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cyahua 中级黑马   /  2018-4-14 11:48  /  579 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-4-20 09:23 编辑

重用API及异常



Object
  • 是所有类的根类, 所有类默认都直接或间接的继承自它
  • 成员方法:

    • String toString(): 返回对象的字符串表示方式

      • 重写toString()的作用: 改变对象的字符串显示方式


    • boolean equals(Object o): 比较两个对象是否"相等"

      • Object类中实现方式: ==, 比较对象的地址值是否相同
      • 重写equals()方法: 改变比较的规则. 可以直接生成



  • 获取字节码的3种方式

    • Class 对象.getClass()
    • 类名.class
    • Class Class.forName("类的全名")


  • 类的字节码对象注意点:

    • 同一个类的字节码对象只有一个, 地址值也是相同的
    • 区分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对象

      • 字符串必须符合模式, 否则抛出异常



  • 常用日期模式

    • y: 年
    • M: 月
    • m: 分
    • D: 年中的天
    • d: 月中的天
    • H: 小时(24小时制)
    • K: 小时(12小时制)
    • S: 毫秒
    • s: 秒
    • E: 星期



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秒. 减少用负数



包装类
  • 作用:

    • 封装了基本数据类型的类, 提供了更多了方法和变量
    • 把基本数据类型的使用方式转换为面向对象的使用方式


  • 基本数据类型和引用数据类型的对应关系

    • byte: Byte
    • short: Short
    • char: Character
    • int: Integer
    • long: Long
    • float: Float
    • double: Double
    • boolean: Boolean


  • Integer类的转换方法

    • int转Integer: Integer Integer(int value)
    • String转Integer: Integer Integer(String s)
    • Integer转int:

      • int intValue(): 将Integer对象的值转换为int类型


    • String转int:

      • static int parseInt(String s): 将字符串转换为int
      • static Integer valueOf(String s)


    • int转String

      • "" + int
      • Integer对象的toString()方法
      • static String toString(int i): 将int转换为String



  • 包装类是引用类型, 所以默认值是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): 按照正则表达式分割字符串


  • 转义:

    • 转义使用\, 正则中有的字符需要转义(. + - *, 预定义字符要写两个斜杠)


  • 常用规则(查看API中的Pattern类)

    • 字符:

      • x: 一个字符x
      • \\: 表示\反斜杠.

        • 为什么有2个? 第一个\是转义的作用


      • [abc]: a或b或c, 即中括号字母中的其中一个
      • [^abc]: 除a, b, c之外的任何字符.

        • ^表示否定


      • [a-zA-Z]: 小写英文a到z, 以及大写英文A到Z.

        • -表示范围



    • 预定义字符

      • .: 任何字符(对于行结束符, 可能匹配, 也可能不匹配)
      • \d: 数字0-9. 相当于[0-9]

        • d是digital的缩写


      • \D: 非数字. 相当于[^0-9]
      • \s: 空白字符. 相当于[ \t\n\x0b\f\r], 包括空格(第一个空就是空格)

        • s是space的缩写


      • \S: 非空白字符. 相当于[^\s]
      • \w: 单词字符. 相当于[a-zA-Z_0-9]

        • w是word的缩写


      • \W: 非单词字符. 相当于[^\w]


    • Greedy数量词

      • X?: X这个字符出现一次或零次
      • X*: X这个字符出现零次或多次, 包括一次
      • X+: X这个字符出现一次或多次
      • X{n}: X这个字符恰好出现n次
      • X{n, }: X这个字符至少出现n次
      • X{n, m}: X这个字符至少出现n次, 但不超过m次





  • Set

    • Set是一个接口, 继承自Collection接口
    • Set特点

      • 元素无序(存入和取出顺序不一样)
      • 元素不能重复(元素唯一)
      • 没有索引


    • HashSet类

      • 是Set接口的实现类
      • 方法

        • boolean add(E e): 添加成功返回true; 添加失败(重复了)返回false


      • 保证元素唯一性的原理(hashCode()方法和equals()方法)

        • HashSet的add()方法, 首先使用当前集合中的每一个元素和新添加的元素进行hash值比较
        • 如果hash值不一样, 则不重复, 直接添加新元素
        • 如果hash值一样, 则继续比较地址值或使用equals方法进行比较
        • 如果比较结果一样, 则认为重复, 不添加
        • 如果for循环所有比较都不一样, 则不重复, 添加元素


      • 如何让自定义对象去重?

        • 重写hashCode()和equals()方法




  • Collections工具类

    • 作用: 提供Collection类的一些工具方法
    • 静态方法

      • static int binarySearch(List list, T key): 使用二分查找来查找元素在指定列表的索引位置
      • static void copy(List dest, List src): 将源列表中的数据覆盖到目标列表

        • 注意: 目标列表的长度至少等于源列表的长度


      • static void fill(List list, Object obj): 使用指定对象填充指定列表的所有元素
      • static void reverse(List list): 反转集合中的元素
      • static void shuffle(List list): 随机打乱集合中元素的顺序
      • static void sort(List list): 将集合中的元素按照元素的自然顺序排序

        • 自然顺序: 元素要具有比较性


      • static void swap(List list, int i, int j): 将指定列表中的两个索引进行位置互换



  • Map接口

    • Map<K, V>是接口, 是双列集合的顶层
    • Map的特点

      • 存储方式是key-value(键值对)方式, 即一个键对应一个值
      • 每个键只能映射一个值
      • Map中的键不能重复, 值可以重复
      • key是无序的


    • Map和Collection的区别

      • Map是双列集合, 用于处理有对应关系的数据, key不能重复且无序
      • Collection是单列集合, 有不同的子体系, 有的允许重复且有序, 有的不允许重复且无序


    • 创建对象

      • Map<K, V> map = new HashMap<>(); 多态
      • HashMap<K, V> map = new HashMap<>(); 正常


    • 方法

      • V put(K key, V value): 添加键值对
      • V get(Object key): 通过指定键获取值
      • int size(): 获取集合长度
      • containsKey(Object key): 是否包含指定的键
      • containsValue(Object value): 是否包含指定的值
      • boolean isEmpty(): 是否为空
      • void clear(): 清空集合
      • V remove(Object key): 删除指定键的值(key和value都会删除)
      • Set<Map.Entry<K, V>> entrySet(): 获取键值对的Set集合
      • Set<K> keySet(): 获取所有键的Set集合
      • Collection<V> values(): 获取所有值得Collection集合


    • Map遍历的2种方式

      • 方式1:

        • map.keySet()获取key的Set集合
        • 遍历Set集合获取每一个key
        • 通过map.get(K key)获取value


      • 方式2:

        • map.entrySet(K,V)获取Entry<K,V>的Set集合
        • 遍历Entry的Set集合, 得到一个Entry对象
        • 调用Entry对象的getKey()获得key, 调用Entry对象的getValue()获取value




  • 可变参数

    • 原理: 底层是根据参数长度创建的数组(JVM操作)
    • 格式: 形参数据类型... 形参名
    • 注意事项:

      • 可变参数的数量可以从0个到多个
      • 可变参数只能是一种数据类型
      • 可变参数的定义位置必须在方法形参列表的最后一个


    • 如何使用可变参数: 把可变参数的形参名作为一个数组变量名, 遍历获取元素




异常
  • 概念: 不正常的情况, 是代码编译或运行时发生的错误
  • 异常的集成体系:

    • java.lang.Throwable(最顶层)

      • Error: 不应该试图捕获的异常
      • Exception: 可以处理的异常(编译时异常, 除了运行时异常)

        • RuntimeException: 运行时异常




  • 异常的分类

    • 编译时异常: 编译时就发生的异常. 必须在编译时期处理
    • 运行时异常: 编译时正常, 运行时发生的异常. 自己选择是否处理


  • 自定义异常

    • 自定义编译时异常: 继承Exception类, 重写构造方法
    • 自定义运行时异常: 继承RuntimeException, 重写构造方法


  • 异常的处理方式

    • JVM默认的异常处理方式

      • 把异常信息打印到控制台, 终止程序的运行, 发生异常之后的代码都不会执行


    • 手动处理异常的方式(2种)

      • 捕获异常: try catch

        • try catch格式(见下方)
        • 多异常的处理

          • catch代码块的顺序

            • 如果多个异常没有继承关系, 顺序无所谓
            • 如果多个异常有继承关系, 子类异常在上, 父类异常在下



        • 捕获异常的执行逻辑

          • 如果try代码块中发生异常, 则会从发生异常的代码直接跳转到catch语句中


        • finally

          • 是一个关键字, 与final区分
          • 作用: 与try catch配合, 无论是否发生异常, 无论是否捕获异常, 都会执行finally代码块
          • 应用:

            • IO流释放资源时, 将close()方法放在finally代码块中




      • 抛出异常:

        • throws:

          • 定义在方法声明上
          • 是处理异常的一种方式, 方法内部不处理, 由方法的调用者处理
          • 格式: 方法声明 throws 异常类型1, 异常类型2 {}


        • throw

          • 用在方法中
          • 制造异常, 抛出一个异常对象
          • 格式: throw new 异常类型构造方法();





  • Throwable常用方法

    • String getMessage(): 获取异常的原因, 没有原因则返回null
    • String toString(): 返回异常的类型和原因
    • void printStackTrace(): 使用标准错误输出流打印异常详情






0 个回复

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