首页 > 编程笔记 > Java笔记 阅读:6

Java throw的用法(附带实例)

没学 throw 关键字之前,Java 程序中的异常都是运行时环境引发的,而在实际编程过程中,可以显式地抛出自己的异常。

在 Java 中,使用 throw 语句可以明确抛出某个异常。throw 语句的标准形式如下:
throw ExceptionInstance;
其中,ExceptionInstance 必须是异常类的一个对象,简单数据类型以及非异常类都不能作为 throw 语句的对象。

与 throws 语句不同,throw 语句用于方法体内,并且只能抛出一个异常类对象,而 throws 语句用在方法声明中指明方法可能抛出的多个异常。

通过 throw 抛出异常后,如果想由上一级代码来捕获并处理异常,需要在抛出异常的方法中使用 throws 语句在方法声明中指明要抛出的异常;如果想在当前方法中捕获并处理 throw 抛出的异常,则必须使用 try…catch 语句。

执行流程在 throw 语句后立即停止,后面的任何语句都不执行。程序会检查最里层的 try 语句块,看是否有 catch 语句符合所发生的异常类型。如果找到符合的 catch 语句,程序控制就会转到那个语句;如果没有,那么将检查下一个最里层的 try 语句,依此类推。如果找不到符合的 catch 语句,默认的异常处理系统将终止程序并打印堆栈轨迹。

当然,如果 throw 抛出的异常是 Error、RuntimeException 或它们的子类,则无须使用 throws 语句或 try…catch 语句。

例如,当输入一个学生的年龄为负数时,Java 运行时系统不会认为这是错误的,而实际上这是不符合逻辑的,这时就可以通过显式地抛出一个异常对象来处理。

【实例】throw 语句的使用。创建一个 ThrowDemo 类。该类的成员方法 validate() 方法首先将传过来的字符串转换为 int 类型,然后判断该整数是否为负,如果为负则抛出异常,然后此异常交给方法的调用者 main() 方法捕获并处理。
public class ThrowDemo {
    public static int validate(String initAge) throws Exception {
        int age = Integer.parseInt(initAge); // 把字符串转换为整型
        if (age < 0) // 如果年龄小于 0
            // 抛出一个 Exception 类型的对象
            throw new Exception("年龄不能为负数!");
        return age;
    }

    public static void main(String[] args) {
        try {
            int yourAge = validate("-30"); // 调用静态的 validate 方法
            System.out.println(yourAge);
        } catch (Exception e) { // 捕获 Exception 异常
            System.out.println("发生了逻辑错误!");
            System.out.println("原因:" + e.getMessage());
        }
    }
}
程序执行结果为:

发生了逻辑错误!
原因:年龄不能为负数!

相关文章