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

【从零开始学Java | 第三十三篇】异常(Exception)

目录

前言

一、异常体系介绍

二、异常

1.异常的作用

2.异常的处理方式

①JVM默认处理方式

②捕获异常

三、Throwable的成员方法

1.throw和throws的区别

①throws

②throw


前言

在 Java 开发中,异常(Exception)是一个绕不开的话题。无论你是刚学 Java,还是已经开始做项目开发,都会频繁遇到这些问题:

  • 为什么代码会报异常?
  • ExceptionError有什么区别?
  • 什么是运行时异常,什么是编译时异常?
  • throwthrows到底怎么区分?
  • try-catch-finally应该怎么写才规范?
  • 为什么要自定义异常?

这篇文章就带你系统梳理 Java 异常机制,争取一篇文章把这个知识点讲透。

一、异常体系介绍

我们只需要看Exception即可,Error表示的是严重错误,通常是 JVM 或系统级别的问题,一般程序员无法通过代码处理。

  • Exception:异常,代表程序可能出现的问题。
  • 运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。运行时出现的异常(如:数组索引越界异常)
  • 编译时异常编译阶段就会出现异常提醒。(如:日期解析异常)

二、异常

1.异常的作用

作用一:异常是用来查询bug的关键参考信息。

作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况。

当我写了一个有异常的程序并且运行之后

public class Test { public static void main(String[] args) { String str = null; System.out.println(str.length()); } }

在之前如果想实现一个不合法数据的处理,通常会选择直接打印在控制台,掌握了异常之后,我们可以直接抛出异常。

public void setAge(int age) { if(age < 18 || age > 40){throw new RuntimeException(); }else{ this.age = age; } }
public class Test { public static void main(String[] args) { Student s1 = new Student(); s1.setAge(50); } }

2.异常的处理方式

  • JVM默认处理方式
  • 捕获异常,自己处理
  • 抛出异常,交给调用者处理

①JVM默认处理方式

把异常的名称,异常原因以及异常出现的位置等信息输出在了控制台

程序停止执行,异常下面的代码不会再执行

public class Test { public static void main(String[] args) { System.out.println("第一句"); System.out.println(2/0); System.out.println("第二句"); System.out.println("第三句"); } }

当我执行上面这段代码时,只会执行第一句,遇到异常后直接停止。

②捕获异常

格式:

try{

可能出现异常的代码;

} catch(异常类名 变量名){

异常的处理代码;

}

目的:当代码出现异常时,可以让程序继续往下执行。

public class Test { public static void main(String[] args) { try { int result = 10 / 0; System.out.println(result); } catch (ArithmeticException e) { System.out.println("出现了算术异常:" + e.getMessage()); } System.out.println("看我执行了吗"); } }

输出结果:

执行流程

  • 先执行try中的代码
  • 如果没有异常,catch不执行
  • 如果出现异常,程序会跳到匹配的catch块执行
  • 执行完catch后继续往下走

三、Throwable的成员方法

方法名称说明
public StringgetMessage()返回此Throwable的详细消息字符串
public StringtoString()返回此可抛出的简短描述
public voidprintStackTrace()把异常的错误信息输出在控制台
public class Test { public static void main(String[] args) { try { int result = 10 / 0; System.out.println(result); } catch (ArithmeticException e) { String message = e.getMessage(); System.out.println(message); String str = e.toString(); System.out.println(str); e.printStackTrace(); } System.out.println("看我执行了吗"); } }

1.throw和throws的区别

①throws

写在方法定义处,表示声明一个异常,告诉调用者,使用本方法可能会有哪些异常。

格式:

public void 方法() throws 异常类名1, 异常类名2...{

}

编译时异常:必须要写

运行时异常:可以不写

②throw

写在方法内,结束方法,手动抛出异常对象,交给调用者,方法中下面的代码不再执行。

格式:

public void 方法(){

throw new NullPointerException();

}

示例:

public class Demo {
public static void main(String[] args) {
int age = -1;
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数");
}
}
}

这里是程序员主动制造一个异常,告诉程序“这里有非法情况”。

区别总结:

  • throw:在方法体内部,真正“扔出”异常对象
  • throws:在方法声明处,声明“我这个方法可能会抛异常”

🐂🐴

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

相关文章:

  • 抖音内容管理终极方案:douyin-downloader无水印批量下载完整指南
  • EuroSAT数据集深度解析:基于Sentinel-2的遥感图像分类权威基准
  • ArcMap新手必看:Shape属性中的点ZM值到底是什么?如何快速处理
  • 高通Modem NV配置实战:从SIM卡开机延时到LTE Cat设置,一份给嵌入式工程师的避坑手册
  • 013、数据库性能优化:索引、查询与连接池
  • 从‘抢茅台’到‘秒杀活动’,聊聊Guava令牌桶算法背后的那些‘坑’与最佳实践
  • 从USB充电到HDMI传4K:聊聊PCB板上那些‘隐形’的100Ω和90Ω差分线
  • StructBERT情感识别效果惊艳展示:高置信度正负中性判别真实文本案例集
  • S32K144新手必看:用SDK库函数5分钟搞定GPIO点灯和按键读取
  • AI Coding越来越强,我们还有必要学Processing吗? · 创意编程呛
  • 【笔面试算法学习专栏】回溯算法·进阶两题精讲(LeetCode 39. 组合总和、40. 组合总和 II)
  • 别再只用connectWifi了!微信小程序连接Wi-Fi的完整避坑指南(附getConnectedWifi实战代码)
  • 告别预制镜像:为OrangePi Zero 3构建自定义引导链(U-Boot + BL31 + SCP)实战详解
  • Dify知识库效率翻倍秘诀:巧用元数据过滤,让RAG问答又快又准
  • Qt监控项目实战:用libvlc+OpenGL渲染多路视频流,CPU占用率直降80%
  • TP2855视频解码芯片寄存器配置实战:从亮度调节到色彩锁相环优化
  • GLM-4.1V-9B-Base企业级应用:基于SpringBoot构建智能内容审核系统
  • 可靠性设计:元器件、零部件、原材料的全生命周期管理策略
  • 5分钟搞懂匹配网络:小样本学习中的注意力机制实战指南
  • 告别Miniconda3:在Ubuntu 22.04上两种干净卸载方法的实测对比
  • 避开这些坑!用FPGA驱动安森美PYTHON5000图像传感器的实战指南
  • Phi-4-mini-reasoning开源推理实践:vLLM高效部署与Chainlit前端调用详解
  • FPGA时序约束入门:从“代码能跑多快”到“告诉工具我要跑多快”的思维转变
  • 【PZ-ZU15EG-KFB】璞致ZYNQ UltraScale+ MPSOC核心板:工业级FPGA开发实战指南
  • V4L2开发避雷:为什么你的ioctl调用总返回EBUSY?从streamon到buffer管理的完整解决方案
  • CTF逆向:BFS算法秒解二维四向迷宫实战指南
  • 20252806 2024-2025-2 《网络攻防实践》实验三
  • FPGA新手必看:Xilinx GTX收发器VMGTAVCC供电设计避坑指南
  • 2026年市场诚信的OK镜专用无菌冲洗液源头厂家推荐,成分天然,呵护眼睛健康无负担 - 品牌推荐师
  • FastAPI项目安全升级:用SQLModel多模型策略保护敏感字段(比如用户密码和API密钥)