常用API
toString类

阅读IDEA生成的Equals方法

Objects的常见方法
Objects类与Object还是继承关系,Objects类是从JDK1.7开始之后才有的

Math方法-数学类

System类


BigDecimal类-用于小数的运算


包装类
将基本数据类型,包装成类(变成引用数据类型)
好处:类中存在方法,可以调用方法来解决问题。
分类:
byte Byte short Short int Integer *** long Long float Float double Double boolean Boolean char Character
创建对象
Integer类: 1. 创建对象: JDK5版本之前:Integer i= new Integer(10); JDK5版本之后:Integer i= 10; * 自动装箱:将基本数据类型,自动的包装,变成引用数据类型。 原理:会自动调用Integer.valueOf() * 自动拆箱:将引用数据类型的包装类,转换为基本数据类型使用。 原理:会自动调用对的 intValue() 方法,完成转换 * 结论:基本数据类型,和对应的包装类,是可以直接混合运算的
面试题

标准答案:

对象中的方法

开发常用

时间API

JDK8版本之前和之后的对比

JDK8版本之前
Date类 :代表时间和日期
- 构造方法:
public Date() :将此刻的时间封装为对象
public Date(long time) :根据传入的毫秒值,封装时间对象
- 成员方法:
public void setTime(long time) :根据传入的毫秒值,封装时间对象
public long getTime() :获取时间原点,到时间对象所经历过的毫秒值
SimpleDateFormat 类 :日期格式化类

- 构造方法:
public SimpleDateFormat() :根据默认的格式,来格式化当前时间对象
public SimpleDateFormat(String s) :根据指定的模式,来格式化当前时间对象
- 成员方法:
public String format(Date d) :对传入的日期对象进行格式化操作,返回格式化好的字符串
public Date parse(String source) :对传入的日期字符串进行解析,解析为日期对象
Calendar类 :jdk1.1版本开始,取代Date类的
- 创建对象:
public static Calendar getInstance() :获取Calendar的对象
- 成员方法:
public int get(int field) :根据传入的字段(静态常量),获取指定的日历值
Calendar.YEAR :年
Calendar.MONTH :月(注意,Calendar类的设计者,将月份设计的是0~11,月份取出来应该+1)
Calendar.DAY_OF_MONTH :日
Calendar.DAY_OF_WEEK :星期(注意:星期取出之后需要查表)
Calendar.DAY_OF_YEAR :获取一年中的第几天
public void set(int year, int month, int date) :设置日期对象的年,月,日
public void set(int field, int value) :设置某一个字段
public abstract void add(int field, int amount) :修改某一个字段的偏移量
public static void main(string[]args) { //获取Calendar的对象 Calendar c Calendar.getInstance(); int year c.get(Calendar.YEAR); int month c.get(Calendar.MONTH); int day c.get(Calendar.DAY_OF_MONTH) int weekIndex c.get(Calendar.DAY_OF_WEEK); char[]weeks={' ', '日', '一', '二', '三', '四', '五', '六'}; System.out.println(weeks[weekIndex]); }
JDK8版本之后

JDK8版本后时间API的四大类

LocalDateTime类-用于获取本地时间和日期

LocalDateTime转换LocalDate, LocalTime
转换方法如下 :
- toLocalDate()
- toLocalTime()
获取年月日时分秒相关的方法

修改年月日时分秒相关的方法

DateTimeFormatter类-用于时间格式化和解析

用于时间的格式化和解析 :
1. 对象的获取 : static DateTimeFormatter ofPattern(格式) : 获取格式对象 2. 格式化 : String format(时间对象) : 按照指定方式格式化 3. 解析 : LocalDateTime.parse("解析字符串", 格式化对象); LocalDate.parse("解析字符串", 格式化对象); LocalTime.parse("解析字符串", 格式化对象);
代码演示 :
public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); System.out.println("格式化之前:" + now); // 获取格式化对象 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年M月d日"); // 格式化 String result = formatter.format(now); System.out.println(result); // 解析 String s = "2008年12月10日"; LocalDate localDate = LocalDate.parse(s, formatter); System.out.println(localDate); }
Instant类-用于表示时间的对象
Instant类常见方法 : static Instant now() : 获取当前时间的Instant对象(标准时间) static Instant ofXxxx(long epochMilli) : 根据(秒/毫秒/纳秒)获取Instant对象 ZonedDateTime atZone(ZoneId zone) : 指定时区 boolean isXxx(Instant otherInstant) : 判断系列的方法 Instant minusXxx(long millisToSubtract) : 减少时间系列的方法 Instant plusXxx(long millisToSubtract) : 增加时间系列的方法
代码演示 :
public static void main(String[] args) { // 获取当前时间的Instant对象(标准时间) Instant now = Instant.now(); System.out.println("当前时间为(世界标准时间):" + now); System.out.println("------------------"); // 根据(秒/毫秒/纳秒)获取Instant对象 Instant instant1 = Instant.ofEpochMilli(1000); Instant instant2 = Instant.ofEpochSecond(5); System.out.println(instant1); System.out.println(instant2); System.out.println("------------------"); // 指定时区 ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.systemDefault()); System.out.println("带时区(系统默认)的时间" + zonedDateTime); System.out.println("------------------"); // 判断系列的方法 System.out.println(now.isBefore(instant1)); System.out.println(now.isAfter(instant1)); System.out.println("------------------"); // 减少时间系列的方法 System.out.println("减1000毫秒:" + now.minusMillis(1000)); System.out.println("减5秒钟:" + now.minusSeconds(5)); System.out.println("------------------"); // 增加时间系列的方法 System.out.println("加1000毫秒:" + now.plusMillis(1000)); System.out.println("加5秒钟:" + now.plusSeconds(5)); System.out.println("------------------"); }
Zoneld类-时区类

代码演示 :
public static void main(String[] args) { Set<String> set = ZoneId.getAvailableZoneIds(); System.out.println(set); System.out.println("--------------------------"); // 获取系统默认的时区 ZoneId systemDefault = ZoneId.systemDefault(); System.out.println(systemDefault); // 根据默认时区, 获取时间对象 ZonedDateTime zonedDateTime = Instant.now().atZone(systemDefault); System.out.println(zonedDateTime); System.out.println("--------------------------"); ZonedDateTime zonedDateTime1 = Instant.now().atZone(ZoneId.of("Africa/Nairobi")); System.out.println(zonedDateTime1); }
ZoneDataTime-带时区的时间对象
static ZonedDateTime now() : 获取当前时间的ZonedDateTime对象 static ZonedDateTime ofXxxx(...) : 获取指定时间的ZonedDateTime对象 ZonedDateTime withXxx(时间) : 修改时间系列的方法 ZonedDateTime minusXxx(时间) : 减少时间系列的方法 ZonedDateTime plusXxx(时间) : 增加时间系列的方法
代码演示 :
public static void main(String[] args) { // 获取当前时间的ZonedDateTime对象 ZonedDateTime now = ZonedDateTime.now(); System.out.println(now); System.out.println("--------------------------"); // 获取指定时间的ZonedDateTime对象 ZonedDateTime of = ZonedDateTime.of (2008, 8, 8, 8, 8, 8, 8, ZoneId.systemDefault()); System.out.println(of); System.out.println("--------------------------"); // 修改时间系列的方法 System.out.println(now.withYear(2008)); System.out.println(now.withMonth(8)); System.out.println(now.withDayOfMonth(8)); System.out.println("--------------------------"); // 减少时间系列的方法 System.out.println(now.minusYears(1)); System.out.println(now.minusMonths(1)); System.out.println(now.minusDays(1)); System.out.println("--------------------------"); // 增加时间系列的方法 System.out.println(now.plusYears(1)); System.out.println(now.plusMonths(1)); System.out.println(now.plusDays(1)); }
Duration-用于计算日期间隔 (时分秒)
代码演示 :
import java.time.Duration; import java.time.LocalDateTime; /** * Duration计算日期间隔 (时分秒) */ public class DurationDemo { public static void main(String[] args) { // 此刻日期时间对象 LocalDateTime today = LocalDateTime.now(); System.out.println(today); // 昨天的日期时间对象 LocalDateTime otherDate = LocalDateTime.of(2023, 5 , 11, 0, 0, 0); System.out.println(otherDate); Duration duration = Duration.between(otherDate, today); // 第二个参数减第一个参数 System.out.println(duration.toDays()); // 两个时间差的天数 System.out.println(duration.toHours()); // 两个时间差的小时数 System.out.println(duration.toMinutes()); // 两个时间差的分钟数 System.out.println(duration.toMillis()); // 两个时间差的毫秒数 System.out.println(duration.toNanos()); // 两个时间差的纳秒数 } }
Period-用于计算日期间隔 (年月日)
代码演示 :
import java.time.LocalDate; import java.time.Period; /** * Period计算日期间隔 (年月日) */ public class PeriodDemo { public static void main(String[] args) { // 此刻年月日 LocalDate today = LocalDate.now(); System.out.println(today); // 昨天年月日 LocalDate otherDate = LocalDate.of(2023, 3, 26); System.out.println(otherDate); //Period对象表示时间的间隔对象 Period period = Period.between(today, otherDate); // 第二个参数减第一个参数 System.out.println(period.getYears()); // 间隔多少年 System.out.println(period.getMonths()); // 间隔的月份 System.out.println(period.getDays()); // 间隔的天数 System.out.println(period.toTotalMonths()); // 总月份 } }
ChronoUnit-用于计算两个 “日期” 间隔
- 详细介绍 : 可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位
代码演示 :
import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; /** * ChronoUnit可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位 */ public class ChronoUnitDemo { public static void main(String[] args) { // 本地日期时间对象:此刻的 LocalDateTime today = LocalDateTime.now(); System.out.println(today); // 昨天的时间 LocalDateTime birthDate = LocalDateTime.of(2023, 5, 11, 0, 0, 0); System.out.println(birthDate); System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today)); System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today)); System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today)); System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today)); System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today)); System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today)); System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today)); System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today)); System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today)); System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today)); System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today)); System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today)); System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today)); System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today)); System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today)); } }
时间API的综合小练习
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.Scanner; public class Test2 { /* 需求: 键盘录入用户的生日, 程序计算出用户的年龄 */ public static void main(String[] args) { System.out.println("请输入您的出生日期: "); String birthday = new Scanner(System.in).nextLine(); // 将生日字符串, 转换为时间对象 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年M月d日"); LocalDate birthdayDate = LocalDate.parse(birthday, formatter); // 获取今天的时间 LocalDate now = LocalDate.now(); // 计算时间间隔 long age = ChronoUnit.YEARS.between(birthdayDate, now); System.out.println("时间间隔为: " + age); } }