七、实用类
7.1 Java API介绍
7.1.1 Java API 概述
- API 的意思为 Java 应用程序编程接口
- 还特指 API 的说明文档,也称API帮助文档
- Java 语言的强大之处在于它提供了多种多样的类库,从而提高了编程效率和质量
- Java API 提供常用的包如下
包 | 描述 |
---|---|
java.lang | 编写Java程序时最广泛使用的包,自动导入所有的程序中,包含了Java程序的基础类和接口。包装类、String类等常用的类都包含在此包中,还提供了用于管理类的动态加载、外部进程创建、主机环境查询和安全策略实施等系统操作的类 |
java.util | 包含系统辅助类,特别是Collection、List和Map等集合类 |
java.time | 包含对日期时间进行处理的类,如创建日期对象,格式化日期等 |
java.io | 包含与输入/输出有关的类,如文件操作等类 |
java.net | 包含与网络有关的类,如Socket、ServerSocket等类 |
java.sql | 包含与数据库相关的类,如Connection、Statement等类 |
7.2 枚举
7.2.1 枚举概述
- Java 枚举是一个特殊的类,一般表示一组常量
- Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割
- 定义枚举语法如下:
访问修饰符 enum 枚举名{
常量1,常量2,常量3.....
}
- 枚举中可以定义多个常量,表示不同的枚举值
- 可以使用 “枚举名.常量名” 的形式取出枚举中的指定内容
7.2.2 枚举方法
-
每一个枚举类型成员都可以调用 Enum 类的方法,实现枚举的遍历、比较等操作
-
枚举的常用方法
方法 | |
---|---|
T[] values() | 以数组形式返回枚举类型的所有成员 |
T valueOf() | 将普通字符串转换为枚举实例 |
int compareTo() | 比较两个枚举成员在定义时的顺序,结果为负整数、零或正整数,表示当前对象小于、等于或大于指定对象 |
int ordinal() | 获取枚举成员的索引位置 |
7.2.3 枚举示例
定义一个枚举,包括七个枚举常量,表示一周中的七天,遍历枚举常量,并且实现查看每一周的日程安排
枚举类
public enum Week {
//定义枚举常量
MON,TUE,WED,THU,FRI,SAT,SUN;
}
运行类
public class WeekTest {
//主方法
public static void main(String[] args) {
//创建对象
WeekTest wt=new WeekTest();
//遍历枚举
System.out.println("每天日程安排为:");
for (Week wk:Week.values()) {
wt.doWhat(wk);
}
}
/*
* 定义方法,通过枚举常量查看日程安排
* */
public void doWhat(Week day){
switch (day){
case MON:
case TUE:
case WED:
case THU:
case FRI:
System.out.println("工作日,努力写代码!");
break;
case SAT:
System.out.println("星期六,休息!看电影!");
break;
case SUN:
System.out.println("星期日,休息!陪小琳!");
break;
default:
System.out.println("拜托!地球上一星期就七天欸");
}
}
}
7.2.4 枚举的优点
- 可以使代码易于维护,有助于确保为变量指定合法的、期望的值
- 使用枚举赋值,只需要输入 枚举名和 “.” ,就可以显示所有枚举值
- 枚举使代码更加清晰,允许用描述性的数据,使用时更直观方便
7.3 包装类
7.3.1 包装类概念
- 将基本数据类型封装到一个类中,即将基本类型包装成一个类类型
- Java为每一种基本类型都提供了一个包装类,存于java.lang包中
- 共有八个包装类,关系图如下
- 所有的数字类型都继承了 Number 类,Number 类是一个抽象类
- 包装类和基本数据类的对应关系
类型 | 长度 | 默认值 | 包装类 |
---|---|---|---|
byte | 8位 | 0 | java.lang.Byte |
short | 16位 | 0 | java.lang.Short |
int | 32位 | 0 | java.lang.Integer |
long | 64位 | 0 | java.lang.Long |
float | 32位 | 0.0 | java.lang.Float |
double | 64位 | 0.0 | java.lang.Double |
char | 16位 | \u0000~\uFFFF | java.lang.Character |
boolean | 1位 | false、true | java.lang.Boolean |
7.3.2 包装类和基本数据类型的转换
不同应用场景中,基本数据类型和包装类型间要进行相互转换以完成特定操作
1. 基本数据类型转为包装类
- 使用关键字 new 将一个基本数据类型值包装为一个对象
- 基本数据类型转为包装类语法 :
包装类对象 对象名=new 包装类对象(基本数据)
- 例如,将 int 类型 转为 包装类 Integer 类型的包装类对象
Integer integer=new Integer(32)
2. 包装类转换为基本数据类型
- 一般使用 基本数据类型Value 来转换,如 byteValue()、charValue()等
- 包装类转换为基本数据类型 语法:
基本数据类型 变量名=对象名.基本数据类型Value();
- 例如,将 Integer 类型的包装类对象 转为基本数据类型 int 类型
//定义一个Integer包装类对象
Integer integer=new Integer(32);
//转换为 基本数据类型 int
int num=integer.intValue();
7.3.3 装箱拆箱
- Java 基于数据类型变量和包装类对象之间的转换比较烦琐
- 自动装箱和自动拆箱功能就简化了此操作
- 自动装箱:把基本类型变量直接转换为对应的包装类对象,或者转换为Object类型对象
- 自动拆箱:与装箱相反,将包装类对象转换成对应的基本类型变量
- 示例
public class Test02 {
public static void main(String[] args) {
//基本数据类型变量转换为包装类(装箱)
Integer inObj=5;
Object boolObj=true;
System.out.println(inObj+","+boolObj);
//包装类转换为基本数据类型(拆箱)
int it=inObj;
System.out.println(it);
//如果 boolObj 是否属于包装类 Boolean
if(boolObj instanceof Boolean){
boolean b=(Boolean)boolObj;
System.out.println(b);
}
}
}
7.3 日期类
7.3.1 日期类概述
- JDK1.8中,所有的日期/时间基础类都包含在java.time包中
- 所有关于时间和日期的 API 在使用上都存在缺陷
- 易用性差,时间的计算方式烦琐
- 不是线程安全的
7.3.2 创建日期对象
-
日期和时间都位于 Java.time 包中,提供了一些常用的类
-
在绝大多数情况下,这些类能够有效地处理一些公共的需求
-
java.time 包中表示日期的常用类
类 | 描述 | 示例 |
---|---|---|
LocalDate | 表示日期(年/月/日),不包含时间 | 2020/11/24 |
LocalTime | 表示时间(时/分/秒/毫秒),不包含日期 | 15:32:12 |
LocalDateTime | 表示日期和时间(年/月/日/时/分/秒/毫秒) | 2020/11/24 15:32 |
- LocalDate 类、LocalTime 类、LocalDateTime 类的实例是不可变对象
- 提供简单的日期或时间
- 不包含与时区相关的信息
- 日期类的通用方法
方法 | 描述 |
---|---|
日期类 now() | 据当前时间创建对象返回日期对象 |
日期类 of(int year, Month month, int dayOfMonth) | 据当前时间创建对象返回日期对象 |
Month getMonth() | 获取月份 |
int getDayOfMonth() | 返回当前日期对象的月份天数 |
int getYear() | 返回当前日期对象的年份 |
日期类 plusDays() 日期类 plusWeeks() 日期类 plusMonths() 日期类 plusYears() | 在指定日期上添加天数 在指定日期上添加周数 在指定日期上添加月数 在指定日期上添加年数 |
- 示例
LocalDate localDate=LocalDate.now(); //获取当前日期
LocalTime localTime=LocalTime.now(); //获取当前时间
7.3.3 日期格式化
- 按照定义的格式输出时间,需要使用 DateTimeFormatter 类进行日期格式化处理
- 日期格式化常用方法
方法 | 描述 |
---|---|
ofPattern() | 指定日期格式 使用不同的格式输出当前日期 如"yyyy年MM月dd日 HH:mm:ss" 分别表示年月日时分秒 |
format() | 将日期格式化为字符串 |
- 日期格式化示例
public class Test03 {
public static void main(String[] args) {
//获取当前日期和时间
LocalDateTime localDateTime=LocalDateTime.now();
//指定日期格式
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
//将日期和时间格式化为指定的格式
String str=localDateTime.format(formatter);
System.out.println(str);
}
}
- 运行结果
2023年02月16日 10:40:22
7.4 Random类
7.4.1 Random 类概述
- 用于生成随机数
- 位于 java.util 包中
- Random 类的构造方法
方法 | 描述 |
---|---|
Random() | 创建一个随机数生成器 |
Random(long seed) | 使用单个long种子创建一个随机数生成器 |
- Random 类定义了很多获取随机数的方法,最常用的为nextInt() 方法
- nextInt()重载方法
方法 | 描述 |
---|---|
int nextInt(); | 返回下一个伪随机数,它是此随机数生成器序列中均匀分布的int值 |
int nextInt(int n); | 取自此随机数生成的在0(包括)和指定值n(不包括)之间均匀分布的int值 |
7.4.2 Random 类示例
随机生成10个0-20的随机整数
public class Test04 {
public static void main(String[] args) {
Random random=new Random();
for (int i = 1; i <= 10; i++) {
System.out.println("第"+i+"个随机数:"+random.nextInt(20));
}
}
}
运行效果
第1个随机数:10
第2个随机数:16
第3个随机数:5
第4个随机数:18
第5个随机数:10
第6个随机数:7
第7个随机数:15
第8个随机数:3
第9个随机数:2
第10个随机数:2
tring[] args) {
Random random=new Random();
for (int i = 1; i <= 10; i++) {
System.out.println(“第”+i+“个随机数:”+random.nextInt(20));
}
}
}
**运行效果**
~~~java
第1个随机数:10
第2个随机数:16
第3个随机数:5
第4个随机数:18
第5个随机数:10
第6个随机数:7
第7个随机数:15
第8个随机数:3
第9个随机数:2
第10个随机数:2