模块15回顾
在深入探讨模块16之前,让我们回顾一下【day15】中的重点内容:
-
String类:
- 构造方法:
String()
,String(String s)
,String(char[] chars)
,String(byte[] bytes)
,String(char[] chars, int offset, int count)
,String(byte[] chars, int offset, int count)
。 - 判断方法:
equals
,equalsIgnoreCase
。 - 获取方法:
length()
,concat(String s)
,charAt(int index)
,indexOf(String s)
,substring(开始索引)
,substring(开始索引, 结束索引)
。 - 转换方法:
toCharArray()
,getBytes()
,getBytes(String charsetName)
,replace(c1, c2)
。 - 分割方法:
split(String regex)
。 - 其他方法:
contains(String s)
,endsWith(String s)
,startsWith(String s)
,toLowerCase()
,toUpperCase()
,trim()
。
- 构造方法:
-
StringBuilder类:
append(任意类型数据)
:字符串拼接。reverse()
:字符串反转。toString()
:将StringBuilder转换为String。
模块十六重点
本模块将重点介绍以下几个常用的Java API:
- BigInteger和BigDecimal操作。
- Date和SimpleDateFormat的操作。
- System中的常用方法,主要是数组复制。
- Arrays中的常用方法。
- 利用包装类定义一个标准的JavaBean。
- 包装类和String之间的转换。
第一章:Math类
1. Math类介绍
Math
类是一个数学工具类,主要用于数学运算,其特点如下:
- 构造方法私有,不能实例化。
- 方法都是静态的,可以直接通过类名调用。
2.Math类方法
以下是Math
类的一些常用方法:
static int abs(int a)
:求参数的绝对值。static double ceil(double a)
:向上取整。static double floor(double a)
:向下取整。static long round(double a)
:四舍五入。static int max(int a, int b)
:求两个数之间的较大值。static int min(int a, int b)
:求两个数之间的较小值。
public class Demo01Math {public static void main(String[] args) {System.out.println(Math.abs(-10));System.out.println(Math.ceil(3.6));System.out.println(Math.floor(3.6));System.out.println(Math.round(3.6));System.out.println(Math.round(-2.8));System.out.println(Math.max(10, 20));System.out.println(Math.min(10, 20));}
}
第二章:BigInteger
1.BigInteger介绍
BigInteger
类用于处理超出long
范围的超大整数。以下是其构造方法和常用操作:
BigInteger(String val)
:参数必须是数字形式的字符串。BigInteger add(BigInteger val)
:返回两数之和。BigInteger subtract(BigInteger val)
:返回两数之差。BigInteger multiply(BigInteger val)
:返回两数之积。BigInteger divide(BigInteger val)
:返回两数之商。
public class Demo02BigInteger {public static void main(String[] args) {BigInteger b1 = new BigInteger("121212121212121212121212121212121212121");BigInteger b2 = new BigInteger("121212121212121212121212121212121212121");System.out.println(b1.add(b2));System.out.println(b1.subtract(b2));System.out.println(b1.multiply(b2));System.out.println(b1.divide(b2));}
}
第三章:BigDecimal类
1.BigDecimal介绍
BigDecimal
类用于解决float
和double
运算中的精度损失问题。以下是其构造方法和常用操作:
BigDecimal(String val)
:参数必须是数字形式的字符串。static BigDecimal valueOf(double val)
:初始化小数时可以传入double
型数据。BigDecimal add(BigDecimal val)
:返回两数之和。BigDecimal subtract(BigDecimal val)
:返回两数之差。BigDecimal multiply(BigDecimal val)
:返回两数之积。BigDecimal divide(BigDecimal val)
:返回两数之商。BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
:指定保留小数位数和取舍方式的除法。
public class Demo03BigDecimal {public static void main(String[] args) {BigDecimal b1 = new BigDecimal("3.55");BigDecimal b2 = new BigDecimal("2.12");BigDecimal divide = b1.divide(b2, 2, BigDecimal.ROUND_UP);System.out.println("divide = " + divide);double v = divide.doubleValue();System.out.println("v = " + v);}
}
第四章:Date日期类
1.Date类的介绍
Date
类用于表示特定的瞬间,精确到毫秒。以下是其构造方法和常用方法:
Date()
:获取当前系统时间。Date(long time)
:获取指定时间,传递毫秒值。
private static void date01() {Date date1 = new Date();System.out.println("date1 = " + date1);Date date2 = new Date(1000L);System.out.println("date2 = " + date2);
}
第五章:Calendar日历类
1.Calendar介绍
Calendar
是一个抽象类,用于操作日历相关的操作。以下是其常用方法:
static Calendar getInstance()
:获取Calendar
实例。int get(int field)
:返回给定日历字段的值。void set(int field, int value)
:将给定的日历字段设置为指定的值。void add(int field, int amount)
:根据日历的规则,为给定的日历字段添加或减去指定的时间量。Date getTime()
:将Calendar
转换为Date
对象。
private static void calendar02() {Calendar calendar = Calendar.getInstance();int year = calendar.get(Calendar.YEAR);System.out.println("year = " + year);calendar.add(Calendar.YEAR, -1);System.out.println(calendar.get(Calendar.YEAR));Date date = calendar.getTime();System.out.println("date = " + date);
}
需求: 键盘录入一个年份,判断这一年是闰年,还是平年
- 创建Calendar对象
- 创建Scanner对象,键盘录入一个年份
- 调用set方法,传递年,月,日,set(年,2,1) -> 国外是0-11,所以设置成2月就是代表3月
- 将day减1天(3月1日减1天,就是2月最后一天,知道2月最后一天了,就知道是平年还是闰年了)
- 获取day判断平年还是闰年,输出结果
private static void calendar03() {//1.创建Calendar对象Calendar calendar = Calendar.getInstance();//2.创建Scanner对象,键盘录入一个年份Scanner sc = new Scanner(System.in);int year = sc.nextInt();//3.调用set方法,传递年,月,日//set(年,2,1) -> 国外是0-11,所以设置成2月就是代表3月calendar.set(year,2,1);//4.将day减1天(3月1日减1天,就是2月最后一天,知道2月最后一天了,就知道是平年还是闰年了)calendar.add(Calendar.DATE,-1);int day = calendar.get(Calendar.DATE);//5.获取day判断平年还是闰年,输出结果if (day==29){System.out.println("闰年");}else{System.out.println("平年");}}
第六章:SimpleDateFormat日期格式化类
1.SimpleDateFormat介绍
SimpleDateFormat
类用于格式化和解析日期。以下是其构造方法和常用方法:
SimpleDateFormat(String pattern)
:指定日期格式。String format(Date date)
:将Date
对象按照指定的格式转换为字符串。Date parse(String source)
:将符合日期格式的字符串转换为Date
对象。
时间字母表示 | 说明 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
public class Demo03SimpleDateFormat {public static void main(String[] args) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time1 = sdf.format(new Date()); // 将Date对象按照指定的格式转成StringSystem.out.println("time1 = " + time1);String time2 = "2000-10-10 10:10:10";Date date = sdf.parse(time2); // 将符合日期格式的字符串转成Date对象System.out.println("date = " + date);}
}
第七章:JDK8新日期类
1.LocalDate本地日期
LocalDate
是一个不可变的日期时间对象,表示日期,通常被视为年月日。以下是其常用方法:
static LocalDate now()
:创建LocalDate
对象。static LocalDate of(int year, int month, int dayOfMonth)
:创建LocalDate
对象,设置年月日。
public class Demo04LocalDate {public static void main(String[] args) {LocalDate localDate = LocalDate.now();System.out.println("localDate = " + localDate);// //static LocalDate of(int year, int month, int dayOfMonth) -> 创建LocalDate对象,设置年月日LocalDate localDate1 = LocalDate.of(2000, 10, 10);System.out.println("localDate1 = " + localDate1);}
}
1.2.LocalDateTime对象
LocalDateTime
是一个不可变的日期时间对象,代表日期时间,通常被视为年-月-日-时-分-秒。以下是其常用方法:
static LocalDateTime now()
:创建LocalDateTime
对象。static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second)
:创建LocalDateTime
对象,设置年月日时分秒。
public class Demo05LocalDateTime {public static void main(String[] args) {LocalDateTimelocalDateTime = LocalDateTime.now();System.out.println("localDateTime = " + localDateTime);// //static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second) 创建LocalDateTime对象,设置年月日时分秒LocalDateTime localDateTime1 = LocalDateTime.of(2000, 10, 10, 10, 10, 10);System.out.println("localDateTime1 = " + localDateTime1);}
}
1.3.获取日期字段的方法
以下是获取日期字段的常用方法:
int getYear()
:获取年份。int getMonthValue()
:获取月份。int getDayOfMonth()
:获取月中的第几天。
private static void get() {LocalDate localDate = LocalDate.now();// //int getYear()->获取年份System.out.println(localDate.getYear());// //int getMonthValue()->获取月份System.out.println(localDate.getMonthValue());//int getDayOfMonth()->获取月中的第几天System.out.println(localDate.getDayOfMonth());
}
1.4.设置日期字段的方法
以下是设置日期字段的常用方法:名字是with开头
LocalDate withYear(int year)
:设置年份。LocalDate withMonth(int month)
:设置月份。LocalDate withDayOfMonth(int day)
:设置月中的天数。
private static void with() {LocalDate localDate = LocalDate.now();//LocalDate withYear(int year):设置年份//LocalDate localDate1 = localDate.withYear(2000);//System.out.println(localDate1);//LocalDate withMonth(int month):设置月份//LocalDate localDate2 = localDate1.withMonth(10);//System.out.println("localDate2 = " + localDate2);//LocalDate withDayOfMonth(int day):设置月中的天数//LocalDate localDate3 = localDate2.withDayOfMonth(10);//System.out.println("localDate3 = " + localDate3);LocalDate localDate1 = localDate.withYear(2000).withMonth(10).withDayOfMonth(10);System.out.println("localDate1 = " + localDate1);}
1.5.日期字段偏移
以下是日期字段偏移的常用方法:
plus
开头的方法:向后偏移。minus
开头的方法:向前偏移。
/*向后偏移 -> plus开头方法向前偏移 -> minus开头方法*/private static void plusAndMinus() {LocalDate localDate = LocalDate.now();// LocalDate localDate1 = localDate.plusYears(1L);// System.out.println("localDate1 = " + localDate1);LocalDate localDate1 = localDate.minusYears(1L);System.out.println("localDate1 = " + localDate1);}
2.Period和Duration类
2.1 Period计算日期之间的偏差
以下是Period
类的常用方法:
static Period between(LocalDate d1, LocalDate d2)
:计算两个日期之间的差值。getYears()
:获取相差的年。getMonths()
:获取相差的月。getDays()
:获取相差的天。
private static void period() {LocalDate local1 = LocalDate.of(2022, 12, 12);LocalDate local2 = LocalDate.of(2021, 11, 11);Period period = Period.between(local2, local1);System.out.println(period.getYears());System.out.println(period.getMonths());System.out.println(period.getDays());
}
2.2 Duration计算时间之间的偏差
以下是Duration
类的常用方法:
static Duration between(Temporal startInclusive, Temporal endExclusive)
:计算时间差。toDays()
:获取相差天数。toHours()
:获取相差小时。toMinutes()
:获取相差分钟。toMillis()
:获取相差秒(毫秒)。
参数需要传递 Temporal 的实现类对象, 注意要传递LocalDateTime,因为Duration计算精确时间偏差,所以需要传递能操作精确时间的 LocalDateTime
private static void duration() {LocalDateTime local1 = LocalDateTime.of(2022, 12, 12, 12, 12, 12);LocalDateTime local2 = LocalDateTime.of(2021, 11, 11, 11, 11, 11);Duration duration = Duration.between(local2, local1);System.out.println(duration.toDays());System.out.println(duration.toHours());System.out.println(duration.toMinutes());System.out.println(duration.toMillis());
}
如果计算年月日,就用Period
如果计算时分秒,就用Duration
3.DateTimeFormatter日期格式化类
DateTimeFormatter
类用于格式化和解析日期。以下是其常用方法:
static DateTimeFormatter ofPattern(String pattern)
:获取DateTimeFormatter
对象,指定格式。String format(TemporalAccessor temporal)
:将日期对象按照指定的规则转换为字符串。TemporalAccessor parse(CharSequence text)
:将符合规则的字符串转换为日期对象。
private static void parse() {DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String time = "2000-10-10 10:10:10";TemporalAccessor temporalAccessor = dtf.parse(time);LocalDateTime localDateTime = LocalDateTime.from(temporalAccessor);System.out.println("localDateTime = " + localDateTime);
}
第八章:System类
System
类是一个系统相关工具类,其特点如下:
- 构造方法私有,不能实例化。
- 方法都是静态的,可以直接通过类名调用。
以下是System
类的常用方法:
static long currentTimeMillis()
:返回以毫秒为单位的当前时间,可用于测量效率。static void exit(int status)
:终止当前正在运行的Java虚拟机。static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
:数组复制。
方法 | 说明 |
---|---|
static long currentTimeMillis() | 返回以毫秒为单位的当前时间,可以测效率 |
static void exit(int status) | 终止当前正在运行的 Java 虚拟机 |
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length | 数组复制 src:源数组 srcPos:从源数组的哪个索引开始复制 dest:目标数组 ldestPos:从目标数组哪个索引开始粘贴 length:复制多少个元素 |
public class Demo01System {public static void main(String[] args) {arraycopy();}private static void arraycopy() {int[] arr1 = {1, 2, 3, 4, 5};int[] arr2 = new int[10];System.arraycopy(arr1, 0, arr2, 0, 5);for (int i = 0; i < arr2.length; i++) {System.out.print(arr2[i] + " ");}}
}
第九章:Arrays数组工具类
Arrays
类是一个数组工具类,其特点如下:
- 构造方法私有,不能实例化。
- 方法都是静态的,可以直接通过类名调用。
以下是Arrays
类的常用方法:
static String toString(int[] a)
:按照格式打印数组元素。static void sort(int[] a)
:升序排序。static int binarySearch(int[] a, int key)
:二分查找(前提是升序)。static int[] copyOf(int[] original, int newLength)
:数组扩容。
方法 | 说明 |
---|---|
static String toString(int[] a) | 按照格式打印数组元素 [元素1, 元素2, …] |
static void sort(int[] a) | 升序排序 |
static int binarySearch(int[] a, int key) | 二分查找(前提是升序) |
static int[] copyOf(int[] original, int newLength) | 数组扩容 |
public class Demo02Arrays {public static void main(String[] args) {int[] arr = {5, 3, 4, 6, 5, 4, 7};System.out.println(Arrays.toString(arr));Arrays.sort(arr);System.out.println(Arrays.toString(arr));int[] arr1 = {1, 2, 3, 4, 5, 6, 7};int index = Arrays.binarySearch(arr1, 3);System.out.println("index = " + index);int[] arr2 = {1, 2, 3, 4, 5};int[] newArr = Arrays.copyOf(arr2, 10);System.out.println(Arrays.toString(newArr));}
}
第十章:包装类
1.基本数据类型对应的引用数据类型(包装类)
包装类是基本数据类型对应的类,它们使得基本数据类型具有类的特性。以下是基本数据类型与其对应的包装类:
基本类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
2.Integer的介绍及使用
2.1.Integer基本使用
Integer
是int
的包装类,以下是其构造方法和基本使用:
Integer(int value)
:不推荐使用,但仍然可用。Integer(String s)
:s
必须是数字形式的字符串。
public class Demo01Integer {public static void main(String[] args) {Integer i1 = new Integer(10);System.out.println("i1 = " + i1);Integer i2 = new Integer("10");System.out.println("i2 = " + i2);}
}
2.2.自动拆箱装箱
Integer
类提供了自动拆箱和装箱的功能,使得基本类型和Integer
之间的转换更加方便。
public class Demo04Integer {public static void main(String[] args) {Integer i = 10; // 发生了自动装箱Integer sum = i + 10; // 发生了自动拆箱装箱System.out.println("sum = " + sum);}
}
public class Demo05Integer {public static void main(String[] args) {Integer i1 = 100;Integer i2 = 100;System.out.println(i1==i2);Integer i3 = 128;Integer i4 = 128;System.out.println(i3==i4);}
}
3.基本类型和String之间的转换
3.1 基本类型往String转
以下是将基本类型转换为String
的常用方法:
- 使用
+
拼接。 - 使用
String
中的静态方法valueOf
。
private static void method01() {int i = 10;String s1 = i + "";System.out.println(s1 + 1);System.out.println("============");String s = String.valueOf(10);System.out.println(s + 1);
}
3.2 String转成基本数据类型
以下是将String
转换为基本数据类型的常用方法:
每个包装类中都有一个类似的方法:parseXXX
。
位置 | 方法 | 说明 |
---|---|---|
Byte | static byte parseByte(String s) | 将String转byte类型 |
Short | static short parseShort(String s) | 将String转成short类型 |
Integer | static int parseInt(String s) | 将String转成int类型 |
Long | static long parseLong(String s) | 将String转成long类型 |
Float | static float parseFloat(String s) | 将String转成float类型 |
Double | static double parseDouble(String s) | 将String转成double类型 |
Boolean | static boolean parseBoolean(String s) | 将String转成boolean类型 |
private static void method02() {int number = Integer.parseInt("1111");System.out.println(number + 1);
}