Java - 常用API
一、数学计算
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
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 妙妙屋!