11、Java 基础硬核复习:常用类和基础API的核心逻辑与面试考点

11、Java 基础硬核复习:常用类和基础API的核心逻辑与面试考点

一、核心知识体系:常用类的"三大模块"与"四大专题"

本章的知识围绕"字符串处理、日期时间、比较排序、其他常用类"展开,可以归纳为三大模块 (字符串、日期、比较器)和四大专题(String、日期类、比较器、其他常用类)。

1.1 字符串家族:不可变性与性能优化

String是Java中最常用的类之一,其核心特性是不可变性(Immutable),理解这一点对优化性能至关重要。

  • 不可变性 :String对象一旦创建,内容无法修改(如String s = "abc"; s = "def"; 实际是创建了新对象,原对象被GC回收)。
  • 内存结构 :String对象存储在堆内存 中,常量池(Constant Pool)用于存储字符串字面量(如"abc"),重复的字符串会复用常量池中的对象(节省内存)。
  • 实例化方式 :
    • 直接赋值:String s = "abc";(从常量池获取,若不存在则创建);
    • new关键字:String s = new String("abc");(无论常量池是否存在,都会创建新对象)。
  • 连接操作 :+(底层用StringBuilder)、concat()(效率低,不推荐)、StringBuilder(线程不安全,效率高)的区别。

1.2 StringBuffer与StringBuilder:线程安全与性能权衡

StringBuffer和StringBuilder用于处理字符串拼接,区别在于线程安全:

  • StringBuffer :线程安全(方法用synchronized修饰),适用于多线程环境;
  • StringBuilder:线程不安全,效率更高(JDK 5.0引入,单线程推荐)。
  • 常用方法 :append()(追加)、insert()(插入)、delete()(删除)、reverse()(反转)等。

1.3 日期时间家族:从旧到新的演进

Java的日期时间类经历了从Date到Calendar再到Java8新API的演进,需掌握各类的使用场景:

  • 旧一代(JDK 8之前) :
    • java.util.Date和java.sql.Date的转换;
    • SimpleDateFormat:用于格式化和解析,但线程不安全;
    • Calendar:日历类,用于日期计算(如"百天推算")。
  • 新一代(JDK 8) :
    • LocalDate(日期)、LocalTime(时间)、LocalDateTime(日期时间):不可变、线程安全;
    • DateTimeFormatter:替代SimpleDateFormat,线程安全。

1.4 比较器:自然排序与定制排序

比较器用于自定义类的排序,需掌握两者的区别:

  • Comparable :自然排序,实现compareTo()方法(如String、Integer已实现),适用于自定义类的默认排序(如商品按价格排序);
  • Comparator :定制排序,实现compare()方法,适用于灵活排序(如商品按名称排序、按销量排序)。

1.5 其他重要工具类

  • System & Math :常用静态方法(如System.currentTimeMillis()获取时间戳,Math.random()生成随机数);
  • BigInteger & BigDecimal:用于处理超大整数和高精度浮点数(金融领域必用,避免浮点数误差)。

二、高频面试考点:必考"死穴",掌握这些=掌握常用类核心

本章的面试题非常"高频",主要考察对"性能"和"安全"的权衡,以下是必考考点:

2.1 String、StringBuffer、StringBuilder的区别(必考 Top1)

  • 考点:这三者有什么不同?什么时候用哪个?
  • 答案 :
    • 可变性 :String不可变;StringBuffer和StringBuilder可变;
    • 线程安全 :StringBuffer安全;StringBuilder不安全;
    • 性能 :StringBuilder > StringBuffer > String;
    • 结论 :操作少量数据用String;单线程大量数据操作用StringBuilder;多线程大量操作用StringBuffer。

2.2 String的不可变性(Immutability)

  • 考点 :为什么String被设计成不可变的?
  • 答案 :
    1. 字符串常量池的需要(节省内存);
    2. 线程安全(在多线程中可以放心共享);
    3. HashCode缓存 (适合做HashMap的key)。

2.3 new String("abc")创建的对象数量

  • 考点 :new String("abc")创建了几个对象?
  • 答案 :两个 (假设常量池中还没有"abc")。一个是在堆中的String对象,另一个是字符串常量池中的"abc"字节码常量。

2.4 Comparable vs Comparator

  • 考点:两者的区别?
  • 答案 :
    • Comparable是**"内部"**的(实现该接口意味着"我天生可以比较");
    • Comparator是**"外部"**的(一种策略模式,意味着"我找了个第三方裁决者来比较")。

2.5 Java 8为什么要引入新的日期API?

  • 考点 :旧的Date/Calendar有什么问题?
  • 答案 :
    1. 线程不安全 :SimpleDateFormat是线程不安全的,多线程下必须加锁或用ThreadLocal;
    2. 设计混乱 :Date既包含日期又包含时间,且月份从0开始(非常反直觉);
    3. 可变性 :旧的Date是可变的,Java 8的新类是不可变的,线程安全。

2.6 高精度计算问题

  • 考点 :涉及钱的计算能用double吗?
  • 答案 :不能 ,会有精度丢失。必须使用**BigDecimal,且构造时必须传入 String类型**(new BigDecimal("0.1"))。

三、学习建议:从"理论"到"实践"的跃迁

  1. 源码阅读 :有空看一眼String类的源码,确认final关键字和char[]数组;
  2. 实战 :把项目中所有的SimpleDateFormat替换为DateTimeFormatter,体会新API的好用之处;
  3. 多写代码:通过字符串反转、日期格式化、商品排序等案例,理解常用类的使用。

四、总结:常用类是"Java基础"的"基石"

第11章是"常用类和基础API"的硬核复习,它将你从"掌握语法"带入"高效使用基础类"的层面。掌握这些知识,你就能写出更高效的代码,也能在面试中轻松应对"Java基础"的"高频考点"。

记住,基础类是Java开发的"工具箱" ------熟练使用String、日期类、比较器,是成为优秀Java开发者的"基本功"。

相关推荐
众链网络2 分钟前
Agent 重试的工程解法:幂等、断点续跑与熔断怎么落地
java·前端·数据库·人工智能
Wang's Blog10 分钟前
Java 项目部署之 Docker工具快速入门: 镜像命令从 pull 到 load 的完整实操
java·开发语言·docker
Wang's Blog18 分钟前
Java 项目部署之 Docker工具快速入门: Docker 数据卷命令与挂载实操
java·开发语言·docker
熊猫钓鱼>_>21 分钟前
面试出现 606 次的第 K 大,被拆成三个问题问
算法·面试·职场和发展·校招·面经·oj·ai生成
小猴子爱上树21 分钟前
跨马翻译:批量图片翻译+视频字幕+智能抠图,跨境电商翻译工具
python·音视频
云和数据.ChenGuang26 分钟前
用 Claude Code 重构遗留系统:从评估到落地的完整指南
java·人工智能·spring boot·后端·重构·springai
霸道流氓气质28 分钟前
AI 应用异常检测与根因分析:语义漂移检测、因果图推理与LLM-as-Judge的 Java 生产级实现
java·开发语言·人工智能
棉猴34 分钟前
玩游戏学Python2-IDLE与pgzero入门
开发语言·python·游戏·玩游戏·pgzero·pgzrun
xuxigifxfh37 分钟前
牛客:BISHI2 【模板】栈的操作
java·开发语言·windows·算法
TechEdu20260640 分钟前
[人工智能]Python12: SciPy 实战指南
人工智能·python·scipy