Java 的数据类型与异常
Jim White
Java Developer
Error 表示严重问题import java.util.*;
public class CauseOutOfMemory {
public static void main(String[] args) {
List<Long> numbers = new ArrayList<Long>();
long counter = 0;
while (true) {
numbers.add(counter);
counter++;
}
}
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.lang.Long.valueOf(Long.java:1204)
at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
| 受检异常 | 运行时("未受检")异常 | |
|---|---|---|
| 是否必须处理 | 是 | 否 |
| 一般原因 | 我们无法控制的情况 | 编程失误 |
| 可恢复性 | 预见时通常可恢复 | 通常不可恢复 |
| 应对机制 | try/catch 或 throws | 最好通过谨慎编码避免 |
| 示例 | 文件未找到 | 数组下标越界 |
RuntimeException 的 Exception 子类为"受检异常"FileNotFoundException)RuntimeException 是所有"未受检异常"的超类IndexOutOfBoundsException)ArithmeticException)| RuntimeException 子类 | 触发时机描述 |
|---|---|
| ArithmeticException | 错误算术计算,如除以 0 |
| IndexOutOfBoundsException | 用于数组、字符串等的索引越界 |
| NegativeArraySizeException | 创建负大小的数组 |
int y = 5/0; // ArithmeticException causing code
int[] list = new int[-1]; //NegativeArraySizeException causing code
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
public class LoadClass {
public static void main(String[] args) {
Class myClass = Class.forName("com.mysql.Driver");
}
}
LoadClass.java:3: error: unreported exception ClassNotFoundException;
must be caught or declared to be thrown
Class myClass = Class.forName("com.mysql.Driver");
^
1 error
Java 的数据类型与异常