三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Java 核心进阶:从异常处理到常用工具类

Java 核心进阶:从异常处理到常用工具类

一、异常处理:程序的“安全气囊”
程序运行过程中难免会遇到意外,Java 提供了一套完善的异常处理机制来应对这些突发状况。

  1. 异常的简介与分类
    异常(Exception)本质上是程序运行时发生的非正常事件。Java 将异常主要分为两大类:
    编译时异常(Checked Exception):如  IOException ,编译器强制要求处理,否则无法通过编译。
    运行时异常(Runtime Exception):如  NullPointerException ,通常由逻辑错误引起,编译器不强制检查。

  2. 捕获异常:try-catch-finally
    这是最基础的处理方式。我们将可能出错的代码放在  try  块中,一旦出错,程序会跳转到对应的  catch  块进行处理。无论是否发生异常, finally  块中的代码(通常用于释放资源)都会执行。
    try {
    // 尝试执行的代码
    int result = 10 / 0;
    } catch (ArithmeticException e) {
    // 捕获并处理除零异常
    System.out.println("除数不能为0");
    } finally {
    // 无论如何都会执行
    System.out.println("执行结束");
    }

  3. 抛出异常:throws 和 throw
    如果当前方法不知道如何处理异常,可以选择将其“甩锅”给调用者。

throw:用在方法体内,手动抛出一个具体的异常对象(例如  throw new RuntimeException("参数错误") )。
throws:用在方法签名上,声明该方法可能会抛出的异常类型,提醒调用者注意。

  1. 自定义异常
    当 JDK 提供的异常无法满足业务需求时(比如“余额不足异常”),我们可以继承  Exception  或  RuntimeException  来定义自己的异常类,使错误提示更具业务含义。

二、常用 API 工具箱

Java 提供了丰富的类库

  1. Math 数学类
     Math  类包含了一系列用于基本数字运算的方法,如绝对值  abs() 、最大值  max() 、随机数  random()  等。它的方法是静态的,直接通过类名调用即可,非常便捷。

  2. 基本数据类型包装类
    Java 是面向对象的语言,但基本数据类型(int, double 等)不是对象。为了方便操作,Java 为每个基本类型提供了对应的包装类(如  Integer ,  Double )。
    自动装箱/拆箱:现代 Java 允许我们在基本类型和包装类之间直接赋值,编译器会自动完成转换。
    实用功能:包装类还提供了字符串转换( parseInt )、进制转换等实用方法。

三、时间与日期:从 Date 到 Calendar
时间处理一直是编程中的痛点,Java 在这方面经历了多次迭代。

  1. Date 类
    这是最早期的时间类,虽然很多方法已过时(Deprecated),但获取当前时间戳依然简单: new Date() 。需要注意的是,它的年份计算通常是从 1900 年开始的,月份是从 0 开始的,使用时容易踩坑。

  2. Calendar 类
    为了解决  Date  的缺陷, Calendar  应运而生。它是一个抽象类,提供了更强大的日历字段操作能力。
    获取实例: Calendar.getInstance() 
    修改时间:可以使用  add()  或  set()  方法灵活地对年、月、日进行加减操作,非常适合处理“下个月的第一天”这种复杂逻辑。

四、时间的格式化与解析

计算机存储的时间通常是毫秒数(Long 类型),而人类习惯看 "yyyy-MM-dd" 格式的字符串。这就需要一个翻译官—— SimpleDateFormat 。
格式化(Format):将Date对象转换为字符串。

解析(Parse):将符合特定格式的字符串转换回Date对象。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(new Date()); // 格式化
Date date = sdf.parse("2023-10-01 12:00:00"); // 解析

五、实战演练:计算时间差

计算两个时间点之间相差的天数。

思路:
将两个时间都转换为毫秒值(使用  getTime() )。
计算毫秒差值的绝对值。
将毫秒差值除以一天的毫秒数(1000 \times 60 \times 60 \times 24)。
这个逻辑不仅适用于天数,稍作修改也能计算小时或分钟差,是日常开发中非常高频的需求。
1c7d9ee3b1e8cfaa58561ad61736ca5d

← 返回列表