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:线程安全与性能权衡

StringBufferStringBuilder用于处理字符串拼接,区别在于线程安全

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

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

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

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

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

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

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

1.5 其他重要工具类

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

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

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

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

  • 考点:这三者有什么不同?什么时候用哪个?
  • 答案
    • 可变性String不可变;StringBufferStringBuilder可变;
    • 线程安全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开发者的"基本功"。

相关推荐
学长毕业设计15 分钟前
基于SpringBoot的奶茶店服务管理系统的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
开源量化GO15 分钟前
学量化:看到“2026年 AI 写 Python”内容时,先用示例和练习补交易认知
人工智能·python
数智启示录16 分钟前
Apache Doris 4.0.8 一致性实战(第 3 篇):Checkpoint 一直成功,Exactly-Once 为什么仍可能是假的
大数据·经验分享·面试·flink
蛋先生DX18 分钟前
明明都是源码到CPU,各语言中间原理咋不是一个套路?
java·javascript·go
boheweidexiatian20 分钟前
如何系统性地准备面试,把通过率提到最高?
面试·职场和发展·求职招聘
萧瑟余晖23 分钟前
Java深入解析篇十三之Java日志API(JUL)详解
java·开发语言
SelectDB技术团队33 分钟前
StarRocks 适合做日志分析吗?
大数据·数据结构·后端·python·doris·日志分析·starrock
随遇而安zx36 分钟前
Spring Cloud Gateway 微服务网关 设计思想与深度解析
java·spring cloud·微服务·架构
catino44 分钟前
spring-事务@Transactional
java·数据库·spring
数智启示录1 小时前
Apache Doris 4.0.8 数据建模实战(第 2 篇):同一批订单写进三种模型,为什么得到三个答案
大数据·数据库·面试