错误与异常

Java 的数据类型与异常

Jim White

Java Developer

异常 vs 错误

  • Error 表示严重问题
  • 应用无法处理并从错误中恢复
    • 错误会导致应用"崩溃"或停止
    • 例:内存不足在 Java 中是错误
  • 应用可以处理并从异常中恢复
    • 访问超出数组大小的元素是异常。
Java 的数据类型与异常
错误示例
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)
Java 的数据类型与异常

两类异常

受检异常 运行时("未受检")异常
是否必须处理
一般原因 我们无法控制的情况 编程失误
可恢复性 预见时通常可恢复 通常不可恢复
应对机制 try/catch 或 throws 最好通过谨慎编码避免
示例 文件未找到 数组下标越界
Java 的数据类型与异常

受检与运行时异常

  • RuntimeExceptionException 子类为"受检异常"
    • 必须处理
    • 如:文件未找到(FileNotFoundException
  • RuntimeException 是所有"未受检异常"的超类
    • 不要求处理
    • 如:访问不存在的数组下标(IndexOutOfBoundsException
    • 如:被零除(ArithmeticException
Java 的数据类型与异常

RuntimeException

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
1 参见 https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Java 的数据类型与异常

受检(Checked)异常

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
1 参见 https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Java 的数据类型与异常

¡Vamos a practicar!

Java 的数据类型与异常

Preparing Video For Download...