一、数学计算

  • java.lang.Math :包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具类,其所有方法均为静态方法,并且不会创建对象
  • java.math.BigInteger:操作不可变的、任意精度的整数,常用于存储超出long类型的整型
  • java.math.RoundingMode:操作数据舍入
  • java.math.BigDecimal:操作不可变的、任意精度的有符号十进制数
  • java.util.Random:用于产生随机数

二、日期时间

  • JDK1.8之前

    • java.util.Date(大多数方法已经在Java 1.1引入Calendar类之后被弃用):返回日期时间
    • java.text.SimpleDateFormat:用于日期时间的格式化
    • java.util.Calendar:抽象类,提供了一个类方法getInstance,以获得此类型的一个通用的对象。它为特定瞬间与一组日历字段之间的转换,和操作日历字段提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间1970年1月1日00:00:00.000)的偏移量
  • JDK1.8之后

    • java.time:包含值对象的基础包
    • java.time.chrono:提供对不同的日历系统的访问
    • java.time.format:格式化和解析时间和日期
    • java.time.temporal:包括底层框架和扩展特性
    • java.time.zone:包含时区支持的类

三、系统相关

  • java.lang.System:执行系统操作

四、数组工具

  • java.util.Arrays:提供了很多静态方法来对数组进行操作,有各种重载形式

五、字符串

  • java.lang.String:代表字符串,Java程序中所有的字符串文字都可以被看作是实现此类的实例

    • 对象保存形式:字符串内部是用字符数组进行保存的(检索字符串常量池,没有则创建String,有则直接赋值),一旦进行修改,就会产生新对象
      • JDK1.9之前:char[] value
      • JDK1.9之后:byte[] byte
    • 字符串存储位置:字符串是常量,它们的值在创建之后不能更改,有常量池来保存常量对象,所以可以共享
      • JDK1.6及其之前:方法区
      • JDK1.7:堆
      • JDK1.8:元空间(常量池)
    • 字符串内存过程:引用指向堆中的一个字符串对象,然后堆中字符串的value数组指向常量池中常量对象的value数组
    • 字符串拼接:使用+将任意数据类型与”字符串”进行拼接,结果都是字符串
    • 拼接结果的存储位置(字符串缓冲区支持可变的字符串)
      • 常量+常量:常量池
      • 常量与变量:堆
      • 变量与变量:堆

六、可变字符序列

String与可变字符序列的区别:因为String对象是不可变对象,虽然可以共享常量对象,但是对于频繁字符串的修改和拼接操作效率极低。因此,JDK又在java.lang包提供了可变字符序列StringBuilder和StringBuffer类型

  • StringBuffer:老的,线程安全的(因为它的方法有synchronized修饰)
  • StringBuilder:新的,线程不安全的
  • StringBuilder、StringBuffer的常用API是完全一致的

七、集合

  • java.util.Collections:是一个操作 Set、List 和 Map 等集合的工具类,提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法

八、IO流

  • java.io.File:File类是java.io包下代表与平台无关的文件和目录,也就是说如果希望在程序中操作文件和目录都可以通过File类来完成,File类能新建、删除、重命名文件和目录。
  • 在API中File的解释是文件和目录路径名的抽象表示形式,即File类是文件或目录的路径,而不是文件本身,因此File类不能直接访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流

附录:字符编码

1、ASCII码

  • ASCII码:美国国家标准协会ANSI制定了一个标准,规定了常用字符的集合以及每个字符对应的编号,这就是ASCII字符集(Character Set)

    • 0~31,127:共33个控制字符或通信专用字符,如LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)
    • 32~126:共95个可显示字符
      • 32:空格
      • 48~57:为0到9十个阿拉伯数字
      • 65~90:为26个大写英文字母
      • 97~122:为26个小写英文字母
      • 其余为一些标点符号、运算符号等

2、OEM字符集的衍生

  • OEM字符集:一个字节后128个数字对应的字符标准(一个字节能够表示的数字(编号)有256个,而ASCII字符只用到了前128个)

3、多字节字符集(MBCS)和中文字符集

  • 多字节字符集:256个字符不够用,便制定了多字节字符集

    • 中文字符集GB2312:涵盖了所有简体字符以及一部分其他字符,使用1-2个字节来表示
    • GBK(K代表扩展的意思):在GB2312的基础上加入了对繁体字符等其他非简体字符,使用1-2个字节来表示

4、ANSI标准、国家标准、ISO标准

  • 标准字符集:操作系统在发布的时候,通常会往机器里预装标准的字符集还有平台专用的字符集

    • ANSI标准
    • ISO标准字符编码:ISO组织制定的各种ISO标准字符编码
    • GBK,GB2312和GB18030

5、Unicode字符集和Unicode编码(UTF-8)

  • Unicode字符集:涵盖了目前人类使用的所有字符,并为每个字符进行统一编号,分配唯一的字符码

  • Unicode字符集将所有字符按照使用上的频繁度划分为17个层面(Plane),每个层面上有都字符码空间

    • 第0个层面BMP基本涵盖了当今世界用到的所有字符
    • 其他层面用来表示一些远古时期的文字或留作扩展,目前Unicode字符集中尚有大量字符空间未使用
  • Unicode字符集中字符编码值的范围是[0, 65535],使用2个字节

  • Unicode编码(UTF标准):解决Unicode在网络上传输的问题

    • UTF-8:每次8个位传输数据,是在互联网上使用最广的一种Unicode的实现方式
    • UTF-8的特点:它是一种变长的编码方式,可以使用1~4个字节表示一个符号。从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换

Unicode字符集只是定义了字符的集合和唯一编号,Unicode编码则是对UTF-8、UCS-2/UTF-16等具体编码方案的统称而已,并不是具体的编码方案。所以当需要用到字符编码的时候,可以写gb2312,codepage936,utf-8,utf-16,但不要写Unicode