BCSP-玄子JAVA开发之面向对象编程CH08_ 实用类笔记
8.1Java API
Java应用程序编程接口(Java Application Programming Interface)
-
是运行库的集合
-
预先定义了一些接口和类
-
还特指API的说明文档,也称API帮助文档
8.1.1 常用包
包 | 描述 |
---|---|
java.lang | 编写Java程序时最广泛使用的包,自动导入所有的程序中,包含了Java程序的基础类和接口。包装类、String类等常用的类都包含在此包中, 还提供了用于管理类的动态加载、外部进程创建、主机环境查询和安全策略实施等系统操作的类 |
java.util | 包含系统辅助类,特别是Collection、List和Map等集合类 |
java.time | 包含对日期时间进行处理的类,如创建日期对象,格式化日期等 |
java.io | 包含与输入/输出有关的类,如文件操作等类 |
java.net | 包含与网络有关的类,如Socket、ServerSocket等类 |
java.sql | 包含与数据库相关的类,如Connection、Statement等类 |
8.2 枚举
是由一组固定的常量组成的类型,JDK1.5引入,继承自java.lang.Enum类
8.2.1 作用
-
使代码更易于维护,有助于确保为变量指定合法的、期望的值
-
简化代码的编写
-
使代码更加清晰,允许描述性的名称表示数据,使用时直观方便
访问修饰符 enum 枚举名 {
// enum 表示是枚举类型
常量1[,常量2...[;] ]
// 可以定义多个常量,表示不同的枚举值
// 逗号作为分隔符
[其他成员]
// 可以定义其他成员,须置于枚举常量后
}
获取枚举中指定内容
枚举名.常量名
通常,使用枚举表示一组有限的值,实现对输入的值进行约束
8.2.2 枚举方法
每一个枚举类型成员都是Enum类的对象,可以调用Enum类的方法,实现枚举的遍历、比较等操作
常用方法
方法 | 描述 |
---|---|
T[] values() | 以数组形式返回枚举类型的所有成员 |
T valueOf() | 将普通字符串转换为枚举实例 |
int compareTo() | 比较两个枚举成员在定义时的顺序,结果为负整数、零或正整数,表示当前对象小于、等于或大于指定对象 |
int ordinal() | 获取枚举成员的索引位置 |
8.2.3 枚举的好处
- 可以使代码易于维护,有助于确保为变量指定合法的、期望的值
- 使用枚举赋值,只需要输入 枚举名和
.
,就可以显示所有枚举值 - 枚举使代码更加清晰,允许用描述性的数据,使用时更直观方便
8.2.4 案例
enum Week {
MON,TUE,WED,THU,FRI,SAT,SUN;
}
public class EnumTest {
public static void main(String[] args) {
System.out.println("*********foreach遍历枚举元素*********");
for(Week w:Week.values()) {
System.out.println(w);
}
System.out.println("*********获取枚举的个数*********");
System.out.println("一周有"+Week.values().length+"天。");
System.out.println("*********使用索引遍历枚举元素*********");
for(int i = 0; i< Week.values().length; i++) {
System.out.println("索引"+ Week.values()[i].ordinal()+",值:" + Week.values()[i]+"。");
}
System.out.println("*********枚举元素比较*********");
System.out.println((Week.valueOf("MON")) .equals(Week.MON) );
System.out.println( Week.FRI.compareTo(Week.TUE));
}
}
8.3 包装类
基本数据类型是不支持面向对象机制的,不具备对象的特征,为程序开发带来了一定方便的同时,也会受到一些制约
将基本数据类型封装到一个类中,即将基本类型包装成一个类类型
-
Java为每一种基本类型都提供了一个包装类
-
保存于java.lang包中
8.3.1 用途
-
作为和基本数据类型对应的类型,方便对象的操作
-
包含每种基本数据类型的相关属性
- 如最大值、最小值等,以及相关的操作方法
8.3.2 包装类关系图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E20obpld-1676558289878)(./assets/image-20230216215350033.png)]
所有的数字类型都继承了 Number 类,Number 类是一个抽象类
8.3.3 包装类和基本数据类的对应关系
类型 | 长度 | 默认值 | 包装类 |
---|---|---|---|
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 |
不同应用场景中,基本数据类型和包装类型间要进行相互转换以完成特定操作
8.3.4 基本数据类型向包装类转换
包装类的构造方法
public Type (type value)
// Type 表示包装类
// (type value) type 基本数据类型
public Type (String value)
包装类对象 对象名=new 包装类对象(基本数据)
Integer integer=new Integer(32);
Integer integer=new Integer("32");
调用包装类的 valueOf() 方法也可实现从基本数据类型到包装类型的转换,可自行查阅API帮助文档学习
8.3.5 包装类和基本数据类型的转换
public type typeValue( );
// type 表示基本数据类型
基本数据类型 变量名=对象名.基本数据类型Value();
Integer integer=new Integer(32);
//定义一个Integer包装类对象
int num=integer.intValue();
//转换为 基本数据类型 int
8.3.6 装箱拆箱
自动装箱(Autoboxing)
- 把基本类型变量直接转换为对应的包装类对象,或者转换为Object类型对象
自动拆箱(AutoUnboxing)
- 与装箱相反,将包装类对象转换成对应的基本类型变量
package CH_08.Integer;
public class MyInteger {
public static void main(String[] args) {
Integer inObj = 5;
Object boolObj = true;
// 装箱
System.out.println(inObj + "," + boolObj);
int it = inObj;
// 拆箱
System.out.println(it);
if (boolObj instanceof Boolean) {
boolean b = (Boolean) boolObj;
System.out.println(b);
// 先将Object类对象强制转换为Boolean类型
// 再赋值给boolean类型变量
}
}
}
8.3.7 总结
自动装箱拆箱大大简化了基本类型和包装类型相互转换的过程
编码时,基本数据类型和包装类型要相互匹配
-
Integer对象只能自动拆箱成int变量,不能试图拆箱成boolean类型变量
-
int变量也只能自动装箱成Integer对象,而不能是Boolean对象
即使可以赋值给Object对象,也只是利用了Java中向上自动转型特性
基本数据类型和包装类对象间的相互转换工作会增加系统的额外负担,影响代码的运行性能
包装类对象只有在基本数据类型需要用对象表示时才使用,但它并不能取代基本数据类型
8.4 日期类
JDK1.8中,所有的日期/时间基础类都包含在java.time包中
是不可变的线程安全的,在绝大多数情况下,这些类能够有效地处理一些公共的需求
8.4.1 常用类
类 | 描述 | 示例 |
---|---|---|
LocalDate | 表示日期(年/月/日),不包含时间 | 2020/11/24 |
LocalTime | 表示时间(时/分/秒/毫秒),不包含日期 | 15:32:12 |
LocalDateTime | 表示日期和时间(年/月/日/时/分/秒/毫秒) | 2020/11/24 15:32 |
-
都是不可变的对象
-
提供简单的日期或时间
-
不包含与时区相关的信息
8.4.2 日期类的通用方法
方法 | 描述 |
---|---|
日期类 now() | 根据当前时间创建对象,返回日期对象 |
日期类 of(int year, Month month, int dayOfMonth) | 根据指定日期/时间创建日期类对象 |
Month getMonth() | 获取月份,返回Month,这是一个表示月份的枚举 |
int getDayOfMonth() | 返回当前日期对象的月份天数 |
int getYear() | 返回当前日期对象的年份 |
日期类 plusDays() | 在指定日期上添加天数 |
日期类 plusWeeks() | 在指定日期上添加周数 |
日期类 plusMonths() | 在指定日期上添加月数 |
日期类 plusYears() | 在指定日期上添加年数 |
LocalDateTime localDate = LocalDateTime.now();
//获取当前时间
8.4.3 日期格式化
使用DateTimeFormatter类对日期格式化,使之按指定格式输出
DateTimeFormatter类位于java.time.format包
常用方法
方法 | 描述 |
---|---|
ofPattern() | 传入格式字符串,规范化日期输出格式 |
format() | 将日期格式化为字符串 |
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日" );
// 指定日期格式
//两种格式化方式
String str1 = localDate.format( formatter );
// formatter DateTimeFormatter类对象
String str2 = formatter.format( localDate );
// localDate LocalDate 类对象
//结果:2023年02月16日
//另一种格式化方式
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date dt = new Date();
System.out.println(format.format(dt));
//结果:2023-02-16
8.5 Random 类
通过一个种子以任意或非系统方式生成随机数
位于java.util包
8.5.1 构造方法
方法 | 描述 |
---|---|
Random() | 创建一个随机数生成器 |
Random(long seed) | 使用单个long种子创建一个随机数生成器 |
8.5.2 nextInt() 重载方法
方法 | 描述 |
---|---|
int nextInt(); | 返回下一个伪随机数,它是此随机数生成器序列中均匀分布的int值 |
int nextInt(int n); | 取自此随机数生成器序列的、在0(包括)和指定值n(不包括)之间均匀分布的int值 |
8.5.3 案例
package CH_08.Random;
import java.util.Random;
public class MyRandom {
public static void main(String[] args) {
//创建一个Random对象,即随机数生成器
Random rand = new Random();
//随机生成10个随机整数,并显示
for (int i = 0; i < 10; i++) {
int num = rand.nextInt(10);
System.out.println("第" + (i + 1) + "个随机数是:" + num);
}
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xxXFfaCK-1676558289880)(./assets/image-20230216222148704.png)]
package CH_08.Random;
// 设置random随机数取值范围
public class MyRandom {
public static void main(String[] args) {
// 10-19 之间的值
int a = (int) (Math.random() * 10 + 10);
// (乘以差+1) +保底
}
}
BCSP-玄子JAVA开发之面向对象编程CH08_ 实用类笔记 2.16