Java异常处理:应对意外情况的艺术
立即解锁
发布时间: 2025-08-18 02:13:21 阅读量: 2 订阅数: 19 

# Java异常处理:应对意外情况的艺术
## 1. 计算机历史中的异常事件
在计算机发展的历史长河中,异常情况屡见不鲜。以下是一些具有代表性的事件:
| 时间 | 事件 |
| ---- | ---- |
| 1945年9月9日 | 一只飞蛾飞进哈佛Mark II计算机的继电器中,导致计算机故障,这成为有记录的首个计算机“虫子”事件。 |
| 1957年4月19日 | 匹兹堡西屋公司数据处理中心的经理Herbert Bright收到一盒未标记的计算机穿孔卡片,他猜测是FORTRAN开发团队的软件。他编写了一个小的FORTRAN程序并在IBM 704上编译,最终发现是一个语句中缺少逗号导致编译错误,修正后程序正常运行。 |
| 1962年7月22日 | 美国第一艘飞向其他行星的航天器水手一号在发射四分钟后因火箭速度公式中缺少一个类似连字符的符号而被毁。同时,NASA的轨道计算软件中存在错误语句,将循环语句写成了赋值语句。 |
| 2000年1月1日 | 千年虫问题给现代世界带来了巨大的混乱。 |
这些事件表明,即使是微小的错误也可能导致严重的后果,因此在编程中处理异常情况至关重要。
## 2. 异常处理基础
### 2.1 简单库存程序的问题
假设我们正在进行库存盘点,为每个箱子赋予3.25美元的价值。以下是一个简单的Java程序来计算箱子的总价值:
```java
import static java.lang.System.out;
import java.util.Scanner;
import java.text.NumberFormat;
class InventoryA {
public static void main(String args[]) {
final double boxPrice = 3.25;
Scanner myScanner = new Scanner(System.in);
NumberFormat currency = NumberFormat.getCurrencyInstance();
out.print("How many boxes do we have? ");
String numBoxesIn = myScanner.next();
int numBoxes = Integer.parseInt(numBoxesIn);
out.print("The value is ");
out.println(currency.format(numBoxes * boxPrice));
}
}
```
当用户输入一个整数时,程序可以正常运行。但如果用户输入的不是一个有效的整数,比如3.5或字符,程序就会崩溃,并抛出`java.lang.NumberFormatException`异常。
### 2.2 异常处理机制
Java提供了异常处理机制,允许程序检测到可能出现的问题并创建一个新的异常对象。这个过程涉及到几个重要的关键字:
- `throw`:创建一个新的异常对象。
- `throws`:将异常从一个方法传递给调用该方法的代码。
- `try`:包含可能抛出异常的代码。
- `catch`:捕获并处理异常。
以下是改进后的库存程序,使用`try-catch`语句来处理`NumberFormatException`异常:
```java
import static java.lang.System.out;
import java.util.Scanner;
import java.text.NumberFormat;
class InventoryB {
public static void main(String args[]) {
final double boxPrice = 3.25;
Scanner myScanner = new Scanner(System.in);
NumberFormat currency = NumberFormat.getCurrencyInstance();
out.print("How many boxes do we have? ");
String numBoxesIn = myScanner.next();
try {
int numBoxes = Integer.parseInt(numBoxesIn);
out.print("The value is ");
out.println(currency.format(numBoxes * boxPrice));
} catch (NumberFormatException e) {
out.println("That's not a number.");
}
}
}
```
在这个程序中,当用户输入无效的整数时,程序会捕获`NumberFormatException`异常并输出提示信息,而不会崩溃。
### 2.3 catch子句的参数
每个`catch`子句都有一个参数,用于引用捕获的异常对象。我们可以调用异常对象的方法来获取更多关于异常的信息,例如:
```java
catch (NumberFormatException e) {
out.println("That's not a number.");
out.println("Message: " + e.getMessage());
out.println("Here comes a stack trace: ");
e.printStackTrace();
out.println("Did you like the stack trace?");
}
```
调用`getMessage`方法可以获取异常的详细信息,调用`printStackTrace`方法可以显示异常抛出时正在运行的方法的堆栈跟踪信息。
## 3. 自定义异常类
除了Java内置的异常类,我们还可以定义自己的异常类。以下是一个自定义异常类`OutOfRangeException`的示例:
```java
class OutOfRangeException extends Exception {
}
```
这个类继承自Java API的`Exception`类,因此它的实例可以被抛出。
下面是使用自定义异常类的库存程序:
```java
import static java.lang.System.out;
import java.util.Scanner;
import java.text.NumberFormat;
class
```
0
0
复制全文
相关推荐









