
Java 的常用类有包装类、字符串类、Math 类、Arrays 类、System 类、大数字类、日期类。
包装类
Java 有 8 种基本数据类型,Java 中的每个基本数据类型都被包装成了一个类,这些类被称为包装类。
包装类可以分为 3 类:Number
、Character
、Boolean
。
包装类的架构图如下所示:
基本数据类型 | 对应的包装类 |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
除了 int
对应的包装类名称为 Integer
以及 char
对应的包装类名称 Character
,其他 6 种数据类型对应的包装类,命名都为其基本数据类型的首字母的大写。
装箱和拆箱
什么是装箱和拆箱:
装箱就是基本数据类型向包装类转换。
拆箱就是包装类向基本数据类型转换。
装箱和拆箱又有自动和手动之分。
jdk 5 以前需要手动装箱和手段拆箱,jdk 5 以后(含 jdk 5)实现了自动装箱和自动拆箱。
手动装箱和拆箱:
1 | public class Main { |
自动装箱和拆箱:
1 | public class Main { |
包装类常用方法
包装类和 String 类型的相互转换:
1 | public class Main { |
字符串类
在 Java 中字符串属于对象,Java 提供了 String、StringBuffer 和 StringBuilder 三种类来创建和操作字符串。
字符串的基本概念:
字符串常量就是双引号括起的字符序列。
字符串的字符使用 Unicode 字符编码,一个字符(不区分字母还是汉字)占两个字节。
三种字符串类的共同点:
都由 final 修饰,即都不能被其他的类继承。
都实现了 CharSequence 接口。
都实现了 Serializable 接口,可以串行化即可以在网络传输。
三种字符串类的效率比较:
一般情况下 StringBuilder > StringBuffer > String,当然这是相对的,不是绝对的。
三种字符串类的使用的原则:
如果字符串存在大量的修改操作,一般使用 StringBuffer 或 StringBuilder,并在单线程的情况,使用 StringBuilder,多线程的情况,使用 StringBuffer。如果我们字符串很少修改,且被多个对象引用,则使用 String,例如配置信息等。
String 类
String 类是不可变字符串类,效率较低,但是复用率高。
String 类实现了 Comparable 接口,对象可以比较大小。
String 类是不可变的,对 String 对象进行任何操作,其实都是创建一个新的对象,再把引用指向该对象,效率较低。
两种创建 String 对象的区别:
直接赋值:
String str = "abc";
先从常量池查看是否有
"abc"
数据空间,如果有,直接指向,如果没有则重新创建,然后指向。str
最终指向的是常量池中"abc"
的地址。调用构造器:
String str = new String("abc");
先在堆中分配对象所需内存空间,里面有
value
属性,并指向常量池中"abc"
的地址。如果常量池没有"abc"
,则重新创建,如果有,直接通过value
指向。str
最终指向的是堆中的空间地址。
String 类常用方法:
方法名称 | 描述 |
---|---|
equals() |
判断内容是否相等(区分大小写) |
equalsIgnoreCase() |
判断内容是否相等(忽略大小写) |
length() |
获取字符的个数,字符串的长度 |
indexOf() |
获取字符在字符串中第一次出现的索引,索引从 0 开始,如果找不到,返回 -1 |
lastIndexOf() |
获取字符在字符串中最后一次出现的索引,索引从 0 开始,如果找不到,返回 -1 |
substring() |
截取指定范围的子串 |
trim() |
去前后空格 |
charAt() |
获取某索引处的字符,注意不能使用数组下标这种方式 |
toUpperCase() |
把字符串转换为大写 |
toLowerCase() |
把字符串转换为小写 |
concat() |
拼接字符 |
replace() |
替换字符串中的字符 |
split() |
分割字符串 |
toCharArray() |
转换成字符数组 |
compareTo() |
比较两个字符串的大小,前者大则返回正数,后者大则返回负数,相等则返回 0 |
String.format() |
格式化的字符串 |
StringBuffer 类
StringBuffer 类是可变字符串类,效率较高,线程安全。
StringBuffer 类的直接父类是 AbstractStringBuilder。
StringBuffer 对象保存的是字符串变量,里面的值可以更改,每次 StringBuffer 对象的更新实际上可以更新内容,不用每次都创建新对象,效率较高
String 和 StringBuffer 类的相互转换:
1 | public class Main { |
StringBuilder 类
StringBuilder 类是可变字符串类,效率最高,线程不安全。
StringBuilder 类的直接父类是 AbstractStringBuilder。
StringBuilder 类中的方法没有做互斥的处理,因此在单线程的情况下才使用。
StringBuffer 和 StringBuilder 类常用方法:
方法名称 | 描述 |
---|---|
append() |
追加指定字符串 |
delete() |
删除指定字符串 |
replace() |
替换指定字符串 |
indexOf() |
查找指定的字符串在字符串第一次出现的索引,如果找不到则返回 -1 |
insert() |
指定一个位置插入字符串 |
length() |
获取字符的个数,字符串的长度 |
Math 类
Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
Math 类常用方法:
方法名称 | 描述 |
---|---|
Math.abs() |
求绝对值 |
Math.pow() |
求幂 |
Math.ceil() |
向上取整 |
Math.floor() |
向下取整 |
Math.round() |
四舍五入 |
Math.sqrt() |
求开方 |
Math.random() |
返回 0~1 的随机小数 |
Math.min() |
求最小值 |
Math.max() |
求最大值 |
Arrays 类
Arrays 类里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索)。
Arrays 类常用方法:
方法名称 | 描述 |
---|---|
Arrays.toString() |
返回数组的字符串形式 |
Arrays.sort() |
排序(自然排序和定制排序) |
Arrays.binarySearch() |
二分搜索进行查找,要求数组必须是有序的 |
Arrays.copyOf() |
数组元素的复制 |
Arrays.fill() |
数组元素的填充 |
Arrays.equals() |
比较两个数组元素内容是否完全一致 |
Arrays.asList() |
将一组值转换为 List |
System 类
System 类代表当前 Java 程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是无法实例化该类。
System 类常用方法:
方法名称 | 描述 |
---|---|
System.exit() |
退出当前程序 |
System.arraycopy() |
复制数组元素,比较适合底层调用 |
System.currentTimeMillis() |
用于获取当前系统时间,以毫秒为单位 |
System.gc() |
运行垃圾回收机制 |
大数字类
BigInteger 类
如果要存储比 Integer 更大的数字,Integer 数据类型就无能为力了。因此,Java 中提供 BigInteger 类来处理更大的数字。
BigDecimal 类
BigInteger 和 BigDecimal 都能实现大数字的运算,不同的是 BigDecimal 加入了小数的概念。BigDecimal 类支持任何精度的浮点数,可以用来精确计算货币值。
BigInteger 和 BigDecimal 类常用方法:
方法名称 | 描述 |
---|---|
add() |
加法运算 |
subtract() |
减法运算 |
multiply() |
乘法运算 |
divide() |
除法运算 |
日期类
第一代日期类
Date 类用来封装当前的日期和时间。日期格式是国外的格式,因此通常需要对格式进行转换。
SimpleDateFormat 类用来格式化和解析日期,它允许进行日期到文本的格式化,文本到日期的解析。
使用 SimpleDateFormat 类格式化日期:
1 | import java.text.ParseException; |
SimpleDateFormat 类的格式化编码:
第二代日期类
Calendar 类是一个抽象类,且构造器是 protected 的,需要使用
getInstance()
方法来获取对象。Calendar 没有提供对应的格式化类,因此需要自己自定义组合来输出。
自定义组合输出:
1 | import java.util.Calendar; |
第三代日期类
LocalDate 类只包含日期。
LocalTime 类只包含时间。
LocalDateTime 类包含日期和时间。
三种类的构造器都是 private 的,都只能使用
now()
方法来获取对象。DateTimeFormatter 类用来格式化和解析日期。
Instant 类是处理时间戳的,其构造器也是 private 的,需要使用
now()
方法来获取对象。
三种类的使用:
1 | import java.time.LocalDate; |
使用 DateTimeFormatter 类格式化日期:
1 | import java.time.LocalDateTime; |
Instant 和 Date 类的相互转换:
1 | import java.util.Date; |
- 本文标题:Java | 常用类
- 创建时间:2023-04-29 16:25:57
- 本文链接:posts/9f0878d8/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!