Java 基础核心总结篇:时间类 + 包装类 重点干货汇总

Java 基础核心总结篇:时间类 + 包装类 重点干货汇总
在这里插入图片描述
🏠个人主页:黎雁
🎬作者简介:C/C++/JAVA后端开发学习者
❄️个人专栏:C语言数据结构(C语言)EasyXJAVA游戏规划程序人生
✨ 从来绝巘须孤往,万里同尘即玉京
在这里插入图片描述


文章目录

在这里插入图片描述

Java 基础核心总结篇:时间类 + 包装类 重点干货汇总 📚

整合前三篇核心知识点,剔除冗余,全是干货!覆盖日常开发高频用法+面试考点,建议收藏备用~

📝 文章摘要

  • 阅读时长:8 分钟
  • 适合人群
    1. 刚学完前三篇的同学 → 重点看:知识点梳理、易错点汇总,快速巩固记忆
    2. 准备面试/刷题的同学 → 重点看:核心考点、对比总结、高频提问点
    3. 日常开发备查 → 重点看:常用类、核心方法,直接对照使用
  • 本文内容:整合 JDK7/JDK8 时间类、Java 包装类全部重点,按模块梳理,突出核心用法、易错点和面试高频考点,无冗余内容,纯干货汇总。

🧠 前三篇核心脉络回顾

  1. 第一篇(JDK7 时间类):传统时间 API(Date、SimpleDateFormat、Calendar),掌握基础用法,了解其设计痛点;
  2. 第二篇(JDK8 时间类):全新时间 API(LocalDate、LocalDateTime 等),重点掌握其不可变、线程安全的优势及高频用法;
  3. 第三篇(包装类):基本类型与引用类型的桥梁,核心掌握自动装箱拆箱、Integer 常量池、类型转换方法;
  4. 本篇核心:将前三篇知识点“去冗余、抓重点”,按模块汇总,方便复习、备查、应对面试。

一、时间类 重点干货汇总(JDK7 + JDK8)⏱️

(一)JDK7 时间类(传统 API)—— 了解用法,规避痛点

核心类:3个(Date、SimpleDateFormat、Calendar),重点掌握基础用法,明确其痛点,日常开发优先用 JDK8 替代。

1. Date 类(java.util.Date)
  • 核心作用:表示一个瞬间,精确到毫秒(底层存储毫秒值,从 1970-01-01 00:00:00 UTC 开始);
  • 核心方法(必记):
    • getTime():获取当前时间的毫秒值;
    • setTime(long time):设置时间(通过毫秒值);
  • 构造方法:new Date()(当前时间)、new Date(long time)(指定毫秒值时间);
  • 痛点:方法命名不直观、不能单独操作年月日、线程不安全。
2. SimpleDateFormat 类(java.text.SimpleDateFormat)
  • 核心作用:时间的格式化(Date → 字符串)和解析(字符串 → Date);
  • 核心方法(必记):
    • format(Date date):格式化(重点,日常开发常用);
    • parse(String source):解析(需处理 ParseException 异常);
  • 常用格式:yyyy-MM-dd HH:mm:ss(年月日时分秒);
  • 痛点:线程不安全(多线程环境下使用会出问题),JDK8 用 DateTimeFormatter 替代。
3. Calendar 类(java.util.Calendar)
  • 核心作用:单独操作时间的年、月、日、时、分、秒(解决 Date 不能单独操作字段的问题);
  • 核心要点(必记):
    1. 抽象类,不能直接 new,通过 Calendar.getInstance() 获取对象;
    2. 常用字段(面试常考):
      • Calendar.YEAR:年;
      • Calendar.MONTH:月(0~11,需 +1 才是真实月份,大坑!);
      • Calendar.DAY_OF_MONTH:日;
      • Calendar.DAY_OF_WEEK:星期(1=周日,2=周一…7=周六,大坑!);
    3. 核心方法:get(int field)(获取字段)、set(int field, int value)(修改字段)、add(int field, int amount)(增减字段);
  • 痛点:字段设计混乱(月份、星期起始值不合理)、线程不安全、API 不直观。
4. JDK7 时间类 易错点(必记)
  1. 中国是东八区,0 毫秒值对应时间是 1970-01-01 08:00:00(不是 00:00:00);
  2. SimpleDateFormat 的 parse 方法必须处理异常,否则编译报错;
  3. Calendar 的月份 0 代表 1 月,11 代表 12 月;星期 1 代表周日,7 代表周六,实际开发必须转换。

(二)JDK8 时间类(全新 API)—— 重点掌握,日常首选

核心优势:不可变对象(线程安全)、API 直观、字段合理(月份112,星期17)、职责拆分清晰,是日常开发、面试的重点。

1. 核心类分工(必记,按使用频率排序)
类名核心作用包含信息常用场景
LocalDateTime日期+时间操作(高频)年月日时分秒日志、订单时间、接口请求时间
LocalDate纯日期操作(高频)年月日生日、签到日期、订单日期
LocalTime纯时间操作时分秒纳秒打卡时间、活动开始时间
DateTimeFormatter时间格式化/解析(高频)-替代 SimpleDateFormat
Period日期间隔计算年月日间隔计算两个日期的年/月/日差
Duration时间间隔计算时分秒毫秒间隔计算两个时间的时/分/秒差
ChronoUnit任意单位间隔计算所有时间单位灵活计算(年/月/日/时/分等)
ZoneId时区操作时区信息跨时区时间处理
Instant时间戳(对应 Date)UTC 时间点时间戳记录、跨时区转换
2. 高频类 核心方法(必记,直接套用)
(1)LocalDate / LocalTime / LocalDateTime(三巨头)

通用套路(三者用法一致,仅字段不同):

  • 获取对象:XXX.now()(当前时间/日期)、XXX.of(...)(指定时间/日期);
  • 获取字段:getYear()getMonthValue()(月份1~12)、getDayOfMonth()getHour() 等;
  • 修改字段:withYear(int)withDayOfMonth(int)(返回新对象,原对象不变);
  • 增减字段:plusYears(long)minusDays(long)(返回新对象);
  • 时间比较:isBefore(XXX)isAfter(XXX)(返回 boolean);
  • 相互转换:LocalDateTime → LocalDate(toLocalDate())、LocalDateTime → LocalTime(toLocalTime())。
(2)DateTimeFormatter(格式化解析)
  • 核心方法:DateTimeFormatter.ofPattern("格式")(创建格式化器)、format(时间对象)(格式化);
  • 常用格式:和 SimpleDateFormat 一致(yyyy-MM-dd HH:mm:ss);
  • 优势:线程安全,无需处理异常(解析需处理 DateTimeParseException,频率极低)。
(3)时间间隔计算(Period / Duration / ChronoUnit)
  • Period(年月日间隔):Period.between(起始日期, 结束日期),方法 getYears()getMonths()getDays()
  • Duration(时分秒间隔):Duration.between(起始时间, 结束时间),方法 toDays()toHours()toMillis()
  • ChronoUnit(任意单位):ChronoUnit.单位.between(起始时间, 结束时间)(如 ChronoUnit.YEARS.between(...)),最灵活。
3. JDK8 时间类 核心要点(必记)
  1. 所有时间类都是不可变对象,修改、增减时间都会返回新对象,原对象不变(线程安全的核心原因);
  2. 月份是 1~12,星期是 1~7(1=周一,7=周日),符合日常直觉,无需转换;
  3. 日常开发优先级:LocalDateTime > LocalDate > LocalTime,DateTimeFormatter 替代 SimpleDateFormat;
  4. Instant 是 UTC 时间戳,需绑定时区(atZone(ZoneId))才能转换为本地时间。

(三)JDK7 vs JDK8 时间类 对比(面试高频)

对比维度JDK7 时间类JDK8 时间类
线程安全不安全(如 SimpleDateFormat)安全(不可变对象)
字段设计混乱(月份0~11,星期1=周日)合理(月份1~12,星期1=周一)
API 直观性差(方法命名不清晰)好(见名知意)
职责拆分模糊(Date 既表示时间又可格式化)清晰(按功能拆分类)
日常开发推荐不推荐(仅兼容旧代码)强烈推荐(首选)

二、包装类 重点干货汇总(全考点)📦

核心定位:基本数据类型与引用类型的桥梁,解决基本类型不能作为对象使用的问题,是集合、泛型的前置知识,面试高频。

1. 8种基本类型与包装类 对应关系(必记,面试常考)
基本数据类型包装类(引用类型)父类关键备注
byteByteNumber字节型,日常使用极少
shortShortNumber短整型,日常使用极少
intIntegerNumber整型,最常用,考点最多
longLongNumber长整型,需加 L(如 100L)
floatFloatNumber单精度浮点型,需加 F(如 3.14F)
doubleDoubleNumber双精度浮点型,日常最常用浮点型
charCharacterObject唯一不继承 Number 的包装类
booleanBooleanObject布尔型,parse 方法仅"true"转 true
小技巧:除了 int→Integer、char→Character,其余包装类都是基本类型首字母大写。
2. 装箱与拆箱(核心考点)
(1)定义(必记)
  • 装箱:基本数据类型 → 对应包装类(如 int → Integer);
  • 拆箱:包装类 → 对应基本数据类型(如 Integer → int)。
(2)两种方式(必记)
方式手动装箱/拆箱(JDK5 前)自动装箱/拆箱(JDK5 后,重点)
装箱(基本→包装)new Integer(123) / Integer.valueOf(123)Integer i = 123;(底层调用 valueOf())
拆箱(包装→基本)i.intValue()int num = i;(底层调用 intValue())
(3)核心要点(必记)
  1. JDK5 后,基本类型和包装类可直接赋值、运算、比较(自动转换);
  2. 自动装箱/拆箱是 编译器优化,底层还是调用对应方法(不是 JVM 优化);
  3. 包装类可以为 null,基本类型不能为 null(日常开发注意空指针异常)。
3. Integer 常量池(面试高频考点,必记)
  • 核心机制:Java 提前创建了 -128 ~ 127 之间的 Integer 对象,存入常量池;
  • 复用规则:
    1. valueOf() 或自动装箱创建该区间内的对象,复用常量池对象(地址相同);
    2. new Integer() 创建对象,无论值是否在区间内,都新建对象(地址不同);
    3. 值超出 -128~127,无论用哪种方式,都新建对象(不复用)。

面试常考题示例(答案必记):

Integer i1 =127;Integer i2 =127;System.out.println(i1 == i2);// true(复用常量池)Integer i3 =128;Integer i4 =128;System.out.println(i3 == i4);// false(超出区间,新建对象)Integer i5 =newInteger(127);Integer i6 =newInteger(127);System.out.println(i5 == i6);// false(new 新建对象)
4. 包装类 常用方法(必记,日常高频)
方法类型核心方法说明
类型转换(高频)Integer.parseInt(String s)字符串 → int(最常用)
Double.parseDouble(String s)字符串 → double
Boolean.parseBoolean(String s)字符串 → boolean(仅"true"转 true)
进制转换Integer.toBinaryString(int i)int → 二进制字符串
Integer.toHexString(int i)int → 十六进制字符串
装箱方法Integer.valueOf(int i)int → Integer(自动装箱底层)
5. 包装类 易错点(必记)
  1. 除了 Character,其余 7 种包装类都有 parseXxx() 方法(字符串转基本类型);
  2. Character 没有 parseChar() 方法,字符串转 char 需用 str.charAt(0)
  3. parseXxx() 方法的参数必须是符合对应类型的字符串(如 parseInt() 只能接收纯数字),否则抛 NumberFormatException
  4. 包装类 == 比较地址,equals() 比较值(重写了 equals 方法);基本类型 == 比较值。

三、整体核心考点 + 面试高频提问(必背)📝

(一)时间类 面试高频

  1. JDK7 时间类的痛点是什么?(线程不安全、字段混乱、API 不直观);
  2. JDK8 时间类的优势是什么?(不可变、线程安全、API 直观、字段合理);
  3. SimpleDateFormat 为什么线程不安全?JDK8 用什么替代?(底层有共享变量,用 DateTimeFormatter 替代);
  4. LocalDateTime 和 Date 的区别?(不可变 vs 可变、线程安全 vs 不安全、API 直观 vs 不直观);
  5. 如何计算两个日期的间隔?(Period、Duration、ChronoUnit,说明各自适用场景)。

(二)包装类 面试高频

  1. 包装类的作用是什么?(让基本类型变成对象,适配集合、泛型);
  2. 自动装箱拆箱的原理是什么?(JDK5 编译器优化,底层调用 valueOf() 和 xxxValue() 方法);
  3. Integer 常量池的范围是什么?复用规则是什么?(-128~127,valueOf/自动装箱复用,new 不复用);
  4. int 和 Integer 的区别?(基本类型 vs 引用类型、不能为 null vs 可以为 null、== 比较值 vs 比较地址);
  5. String 转 int 用什么方法?(Integer.parseInt(String s));
  6. Boolean.parseBoolean(“abc”) 的结果是什么?(false,仅"true"转 true)。

📌 全篇核心总结(纯干货,必记)

  1. 时间类:日常开发优先用 JDK8 的 LocalDateTime、LocalDate、DateTimeFormatter,规避 JDK7 的线程安全和字段混乱问题;
  2. 包装类:记牢 8 种对应关系,掌握自动装箱拆箱原理、Integer 常量池,重点学会 parseXxx() 类型转换方法;
  3. 易错点:Calendar 月份/星期的起始值、Integer 常量池复用规则、包装类 null 空指针风险;
  4. 面试重点:JDK7/JDK8 时间类对比、自动装箱拆箱原理、Integer 常量池、常用方法。

✍️ 写在最后

本篇已将 Java 基础核心的 时间类(JDK7+JDK8)和包装类 全部重点干货汇总完毕,覆盖了日常开发高频用法和面试核心考点,建议收藏起来,复习、备查、应对面试都能用得上。

前三篇是详细讲解,本篇是重点提炼,两者结合,能彻底吃透这两个 Java 基础核心模块。后续我们将继续推进 Java 基础系列,学习字符串、集合框架等核心知识点,逐步搭建完整的 Java 知识体系,助力大家扎实掌握 Java 基础,从容应对开发和面试~

觉得干货实用,欢迎点赞 👍、收藏 💾、评论 💬,后续持续更新高质量 Java 基础干货总结,陪你一起夯实 Java 基础!

Read more

Java 中间件:RocketMQ 顺序消息(全局/分区顺序)

Java 中间件:RocketMQ 顺序消息(全局/分区顺序)

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕Java中间件这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * Java 中间件:RocketMQ 顺序消息(全局 / 分区顺序) * 什么是顺序消息? * RocketMQ 顺序消息的工作原理 * 全局顺序 vs 分区顺序 * RocketMQ 顺序消息的核心机制 * 全局顺序消息的实现 * 全局顺序的配置要求 * Java 代码示例:全局顺序消息 * 全局顺序的局限性 * 分区顺序消息的实现 * 分区顺序的设计思路 * Java 代码示例:分区顺序消息 * 分区顺序的关键要点 * 顺序消息的消费机制详解 * ConsumeOrderlyStatus 枚举 * 消费失败的处理机制 * 并发消费 vs 顺序消费

By Ne0inhk
保姆级教程!手把手带你玩转国产AI编辑器TRAE

保姆级教程!手把手带你玩转国产AI编辑器TRAE

手把手带你玩转国产AI编辑器TRAE 在AI技术飞速发展的今天,一款优秀的AI代码编辑器能够极大提升开发效率。今天要向大家推荐的,是近期备受关注的国产AI编辑器——TRAE。无论你是编程新手还是资深开发者,这款工具都值得你深入了解。 什么是TRAE? TRAE是一款由国内团队开发的智能代码编辑器,它集成了先进的AI辅助编程功能,能够提供代码补全、错误检查、智能重构等多项实用功能,支持多种主流编程语言,旨在为开发者提供更加高效、舒适的编码体验。 入门指南:从安装到第一个项目 第一步:下载与安装 访问Trace官网( https://www.trae.cn/ ),根据你的操作系统(Windows/macOS/Linux)下载对应版本的安装包。安装过程简单直观,只需按照提示一步步完成即可。 第二步:基础设置 首次启动Trace,建议进行以下基础配置: * 选择主题和界面布局(深色/浅色模式) * 安装必要的语言扩展包 * 设置代码风格偏好(缩进、括号样式等) 下一步点击登录 登录成功后进入主界面 第三步:创建你的第一个项目 1.在指定位置(

By Ne0inhk
Agent Skill黄金三层结构与五步法打造指南:让AI帮你自动生成若依框架代码!

Agent Skill黄金三层结构与五步法打造指南:让AI帮你自动生成若依框架代码!

文章介绍Agent Skill的设计原理与实现方法,重点讲解黄金三层结构(元数据层、指令层、资源层)和五步法打造技能包(定边界、显性化经验、工具与脚本、引入控制流、迭代与反馈)。通过若依代码生成器改造案例,展示如何将项目规范、代码模板打包成可复用Skill,让AI按预设规则自动生成符合规范的代码,提升开发效率并减少重复工作。 读完这篇文章,你将学会: ✅ 什么是 Agent Skill ✅ 设计技能的黄金三层结构 ✅ 五步法打造你的第一个技能包 ✅ 实践拆解:将若依代码生成器改为Agent Skill 前几天有小伙伴在 [Antigravity 进阶指南: 3 种方式复刻 Kiro Spec 模式]那篇文章下留言,想要那个示例里的Spec模式 Skill 包。 我想了想,与其直接给大家丢一个 Skill 文件,不如和大家聊聊什么时候需要创建以及怎么创建Agent Skill。 在让 AI 帮我们生成Skill之前,我们需要先理解 Skill

By Ne0inhk