当前位置: 首页 > news >正文

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

http://www.jsqmd.com/news/912703/

相关文章:

  • 弹载GNSS软件接收机基带信号处理关键技术解析【附代码】
  • VSCode Mermaid插件:技术文档图表化的专业解决方案
  • 别只用来抓包了!Fiddler这些隐藏玩法,让调试效率翻倍
  • ParsecVDisplay虚拟显示驱动技术实现与应用指南
  • iOS微信抢红包助手:告别手动抢红包的智能解决方案
  • Mediasoup为何不需独立STUN服务器
  • 二维点云轮廓提取工具:用Python跑通Alpha Shape边界识别流程
  • GitHub开源项目日报 · 2026年5月27日 · AI技能框架爆发,工具链生态成焦点
  • Claude画像标签体系崩塌前夜:3大信号预示模型老化,附72小时内紧急修复SOP(含Python自动化诊断脚本)
  • 2026年青岛留学中介哪家实力强:团队规模、院校资源与申请成功率横向对比 - 科技焦点
  • Claude战略规划文档究竟在隐藏什么?——前Anthropic核心成员透露的3条未公开约束条件
  • 3步解锁鸣潮自动化神器:告别重复刷本的终极方案
  • Qt5写的C++学生选课系统,带完整界面、数据操作和可直接运行的Windows程序
  • Anaconda环境里装TensorFlow-GPU 2.10.1,我踩过的三个坑和解决办法
  • 百年匠心,专业鉴宝!丰宝斋上门回收,懂宝更懂藏家 - 深鉴新闻
  • 从EasyTouch迁移到Fingers Gesture:Unity手势插件升级实战与性能对比
  • C# WinForms海康摄像头实时预览与全屏播放可运行工程(含SDK封装和JSON配置)
  • Python写的柔性车间调度工具包:带遗传算法+禁忌搜索,含Brandimarte等四大经典测试集
  • 算法日记 | STL-MAP
  • Ansys Workbench | 传动轴的大变形分析
  • Spring Boot+Vue智慧校园系统源码包:含数据库脚本、架构图、部署文档与28张功能截图
  • 从手动保存到智能批量:揭秘抖音下载器的3大场景化应用突破
  • 带后台管理的旅游小程序源码,含前后端+UI资源+部署说明
  • 从零组装台式电脑:硬件兼容性、安装步骤与问题排查全攻略
  • 7-2 签到业务流程
  • 抖音内容高效下载解决方案:douyin-downloader技术深度解析与实战指南
  • 基于12AX7与JCM800电路自制电子管吉他前级:从拆管到调音的完整实践
  • GEO哪个公司效果更好?2026年度TOP10的geo服务商盘点与选型指南+业务介绍+FAQ - 互联网科技品牌测评
  • 做一个开源商城系统以及架构如何选择?
  • 抖音视频批量采集助手:如何轻松实现多用户视频高效下载