记录Java基础-常用API-有关时间日期的类。
1 包装类
- 其实就是8种基本数据类型对应的引用类型,因为基本数据类型不能直接参与面向对象编程。
- 具有将基本数据类型转换为对象的功能,并且实现了多种接口,支持集合框架和泛型。
包装类的主要特点和功能
-
自动装箱与拆箱:从Java 5开始引入了自动装箱和自动拆箱机制,使得基本数据类型和其对应的包装类之间可以自动转换。
-
自动装箱:基本类型的数据和变量可以直接赋值给包装类型的变量。
-
自动拆箱:包装类型的变量可以直接赋值给基本数据类型的变量。
-
-
空值处理:基本类型无法表示null,而包装类可以持有null值,这在需要区分值存在与否的场景下非常有用。
-
实现接口:包装类通常实现了诸如Comparable、Serializable、Cloneable等接口,使得基本类型能够参与到这些接口定义的方法调用中。
-
方法扩展:包装类提供了一些基本类型不具备的方法,如Integer类的parseInt()、toString()方法,以及用于缓存特定范围内的对象以提高性能的静态工厂方法valueOf()等。
包装类使用示例
假设在SpringBoot应用中有一个API接口,用于返回用户的年龄信息。由于年龄(age)是一个基本类型int
,在处理HTTP请求和响应时,通常会将其封装到一个包含状态码和具体数据的包装类中。
首先,创建一个表示用户年龄响应的包装类 AgeResponse
:
import org.springframework.http.HttpStatus;
public class AgeResponse {
private int code; // 状态码
private String message; // 消息提示
private Integer age; // 年龄数据
public AgeResponse(HttpStatus status, String message, Integer age) {
this.code = status.value();
this.message = message;
this.age = age;
}
// Getter与Setter方法
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
然后,在Controller层,当处理完查询用户年龄的请求后,可以将年龄信息封装到AgeResponse
中返回给前端:
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.HttpStatus;
@RestController
public class UserController {
@GetMapping("/users/{id}/age")
public ResponseEntity<AgeResponse> getUserAge(@PathVariable("id") Long id) {
// 假设userService是获取用户年龄的业务服务
Integer userAge = userService.getUserAgeById(id);
if (userAge != null) {
// 将年龄信息封装到AgeResponse中
AgeResponse response = new AgeResponse(HttpStatus.OK, "获取成功", userAge);
return ResponseEntity.ok(response);
} else {
// 用户不存在或年龄未找到时的状态码和消息
AgeResponse response = new AgeResponse(HttpStatus.NOT_FOUND, "未找到该用户的年龄信息", null);
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response);
}
}
}
这样,客户端收到的响应就是一个包含了状态码、消息以及实际年龄数据的对象,便于前后端进行统一的数据交互格式。这里的Integer就是对基本类型int的包装类,它允许我们设置null值,并提供了更多的对象操作功能。
2 Arrays类
java.util.Arrays
类是Java标准库中的一个工具类,提供了处理数组的各种静态方法。- 这个类包含了对数组的排序、搜索、填充、比较以及转换为列表等多种操作。
-
排序:
sort(int[] a)
:对整型数组进行升序排序。sort(Object[] a, Comparator<? super T> c)
:对对象数组按照指定的比较器进行排序。
-
查找:
binarySearch(int[] a, int key)
:在有序整型数组中使用二分查找算法查找指定元素并返回索引,找不到则返回负数。equals(int[] a, int[] a2)
:检查两个整型数组是否相等。
-
填充:
fill(int[] a, int val)
:将整型数组的所有元素设置为给定的值。
-
比较:
deepEquals(Object[] a1, Object[] a2)
:深度比较两个数组的内容是否相同,对于数组内的对象也会递归进行内容比较。
-
复制:
copyOf(int[] original, int newLength)
:创建原数组的一个副本,并可以指定新数组的长度。
-
转换为List:
asList(T... a)
:将数组转换为固定大小的List视图,注意虽然看起来像List,但它不支持add或remove等修改操作。
-
其他方法:
hashCode(int[] a)
:计算数组的哈希码。toString(int[] a)
:将数组的内容转换成字符串表示形式。- 还有针对不同数据类型的类似方法,如
long[]
、double[]
、Object[]
等。
通过 Arrays
类,开发者能够方便地对数组进行各种基础操作,提高代码效率和简洁性。不过,对于多维数组的操作,通常需要循环嵌套调用 Arrays
的方法来实现。此外,在Java 8及更高版本中,Stream API提供了更多灵活且强大的数组操作方式。