突如其来的"中断异常",我(Java)该如何处理?
# **一、何为异常?**
## 1.生活中的实例
生活中存在许多不正常:
上班路上自行车掉链子
上厕所手机掉马桶
下班回家钥匙丢失
。。。。。。。
2.程序中的实例
我们的代码中也许存在许多纰漏,导致用户使用时程序突然停止工作,例如下面简单的Java代码完成一个加法器:
import java.util.Scanner;
public class Count {
public static void main (String []args){
int a , b;
Scanner read = new Scanner(System.in);
System.out.print("请输入a:");
a = read.nextInt();
System.out.print("请输入b:");
b = read.nextInt();
System.out.println("a+b="+(a+b));
}
}
看看输入数据会不会出现异常:
- 当输入100和200时,运行正常:
- 当输入100和a时,运行报错:

这就是Java中的异常,输入不合法,程序无法继续运行被迫终止,流程图如下:

3.异常的概念
异常:异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的。在Java等面向对象的编程语言中异常属于对象(Java语言中异常分为运行时异常(Exception)和编译型异常(Error))。
二、Java中异常处理机制
## 1.Java异常处理机制的概念
Java异常处理机制就是程序代码执行过程中出现异常后,会按照我们预先制定的处理方法对异常进行处理,异常处理完成后程序会继续运行下去。

2.关键字try、throw、throws、catch、finally
try: 尝试执行被此关键字作用的代码块A,若出现异常则忽略代码块A中剩下的代码。
throws: 声明方法中将抛出的异常,通常在方法名后出现。
throw: 手动抛出异常。
catch: 捕获处理异常。
finally:不论出现不出现异常都要此块代码都要执行。

3.try-catch块
try语句块中代码执行时发生三种情况:
- try语句块中代码正常执行完毕,没有任何异常,那么catch语句块的代码将不会被执行。
import java.util.*;
public class Count {
public static void main (String []args){
int a , b;
Scanner read = new Scanner(System.in);
try{
System.out.print("请输入a:");
a = read.nextInt();
System.out.print("请输入b:");
b = read.nextInt();
System.out.println("a+b="+(a+b));
}catch(InputMismatchException ex){
System.out.println("不可以,请输数字!");
}
System.out.println("<<<<欢迎使用!>>>>");
}
}
输入100和200后程序顺利进行!
- try语句块中代码执行过程中产生异常,并且该异常跟catch中声明的异常类型相符合,那么try语句块中剩余的代码将被忽略,catch语句块的代码将被执行。
还是上面代码,输入100和a后程序运行如下:
- **try**语句块中代码执行过程中产生异常,但是抛出的异常并没有在**catch**语句块中声明,那么这个时候程序会立刻终止。
4.try-catch-finally块
在catch子句后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行。
- 代码示例:
import java.util.*;
public class Count {
public static void main (String []args){
int a , b;
Scanner read = new Scanner(System.in);
try{
System.out.print("请输入a:");
a = read.nextInt();
System.out.print("请输入b:");
b = read.nextInt();
System.out.println("a+b="+(a+b));
}catch(Exception ex){
System.out.println("不可以,请输数字!");
}finally{
System.out.println("<<<<欢迎使用!>>>>");
}
}
}
- 运行结果:
5.多重catch块
- 一段代码可能会产生多个异常。
- 依次对每个catch块声明的异常对象进行检查,找到执行第一个与try抛出的异常类型匹配的catch块,之后的catch块将被忽略。
- 异常子类一定要位于异常父类之前,如下图:

分类:
IT-程序设计-JAVA
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?