java 速描?

  • java 速描?回忆版.😂.

  • 资料来源:

    https://www.liaoxuefeng.com/wiki/1252599548343744

  • 更新

    1
    20.03.14 大概无聊,速览一遍 java

导语

  • 纯速览,只写自己有点遗忘的部分.

基础

  • java 的三个版本

    • SE: 标准版
    • EE: 拓展版,企业版,带 Spring 等.
    • ME: 不用看.
  • 一些名词

    • jdk: jre + 编译工具等
    • jre: jvm 虚拟机 + 运行环境.
  • 变量有基本类型和引用类型,两者在传递入参时效果不同.

  • char 是基本类型,String是引用类型,引用类型的变量可以为 null.

  • 数组元素可以是基本类型或引用类型.但数组本身是引用类型.

  • System.out.println() / print() / printf() ,printf()可以格式化输出,格式与 C 基本相同.

  • Scanner对象读取输入,scanner.nextLine() / nextInt() / nextDouble().

  • 引用类型比较使用 equals(),注意空指针.

  • Arrays.toString() 可以快速将数组转为字符串.

  • Arrays.sort() 进行排序.

  • Arrays.deepToString() 打印多维数组.

面向对象

  • final:

    • final修饰的方法可以阻止被覆写.
    • final修饰的class可以阻止被继承.
    • final修饰的field必须在创建对象时初始化,随后不可修改.
  • abstract:

    • 抽象方法必须在抽象类.
    • 不实现抽象方法,子类还是抽象类.
  • interface: 接口

    • java8 以后可以有默认的实现.
    • 抽象方法可以有 public protected 和 default 这些修饰符.
  • String

    • 不可变对象
    • .contains(“ll”): 搜索
    • .substring(2, 4): 提取子串
    • .replace(‘l’, ‘w’): 替换
    • .replaceAll(“[\,\;\s]+”, “,”): 替换正则
    • .join(“***”, arr): 拼接
    • .valueOf(123): 类型转换,自动识别.
    • 与 char[] 互转.
  • StringBuilder是 String 的可变版本.

    • 可以一直 .append / .insert
  • 装箱拆箱都是编译期自动进行,但有性能损失,应当尽量避免.

  • JavaBean是一种符合命名规范的class,通过getter和setter来定义属性(kt 的数据类)

  • Math类

    • abs max min
    • .pow(2,10): 2 的 10 次方
    • .sqrt(2): 开方
    • .exp(2): e 的平反
    • .log(): 取 e 为底的对数
    • .log10(): 取 10 为底的对数
    • 三角函数/PI 等
  • Random 伪随机数.SecureRandom 真随机数.

反射

  • 不再说了,前段时间填坑了.

泛型

  • 在 kotlin 那里填坑了.

集合

  • Collection 是除 map 外的基类.

  • 集合包括 list set 和 map.

  • list

    • ArrayList: 内部数组实现
    • LinkedList: 内部链表实现
    • for each 遍历展开其实是 Iterable 的调用.
    • 转成数组
      • toArray(),极少使用.
      • toArray(T[]),泛型不匹配报错,长度不匹配,过长填 null,过短截断.
      • T[] toArray(IntFunction<T[]> generator),类似生成器.
    • 数组转 List
      • List.of(T…),返回的是一个只读 List.
  • map

    • 同时遍历 key value ,for (Map.Entry<String, Integer> entry : map.entrySet())
    • key 为 enum 使用 EnumMap 没有空间的浪费.
    • 需要 key 遍历时有序,使用 SortedMap(接口),常用 TreeMap(实现类).要求 key 必须严谨的实现 Comparable
  • set:

    • HashSet 无序,TreeSet 有序.
  • Queue: 先进先出(FIFO),避免添加 null.

    • add()/offer(): 元素添加到队尾.
    • remove()/poll(): 获取队首元素并删除.
    • element()/peek(): 获取队首元素但不删除.
    • PriorityQueue: 带优先级的队列.元素实现 Comparable 接口,值越小优先级越高.
  • Deque: 双端队列.

    • 将元素添加到队尾或队首:addLast()/offerLast()/addFirst()/offerFirst()
    • 从队首/队尾获取元素并删除:removeFirst()/pollFirst()/removeLast()/pollLast()
    • 从队首/队尾获取元素但不删除:getFirst()/peekFirst()/getLast()/peekLast()
    • 总是调用xxxFirst()/xxxLast()以便与Queue的方法区分开
    • 避免把null添加到队列
  • Collections

    • .sort: 排序
    • .shuffle: 打乱排序