学科分类
目录
Java基础

throws关键字

在前面章节案例中,定义除法运算时,开发者通常会意识到可能出现的异常,可以直接通过try...catch对异常进行捕获处理,但有些时候,方法中代码是否会出现异常,开发者并不明确或者并不急于处理,为此,Java允许将这种异常从当前方法中抛出,然后让后续的调用者在使用时再进行异常处理。

在Java中,将异常抛出需要使用throws关键字来实现,该关键字用在会抛出异常的方法名称后,同时支持一次性抛出多种类型的异常,基本语法格式如下:

[修饰符] 返回值类型 方法名([参数类型 参数名1...]) throws 异常类1,异常类2,... {
  // 方法体...
}

从上述语法格式中可以看出,throws关键字需要写在方法声明的后面,throws后面需要声明方法中发生异常的类型,通常将这种做法称为方法声明抛出一个异常。接下来对上一节案例进行修改,在devide()方法上声明抛出异常,如文件1所示。

文件1 Example31.java

 1    public class Example31 {
 2         // 下面的方法实现了两个整数相除,并使用throws关键字声明抛出异常
 3        public static int divide(int x, int y) throws Exception {
 4            int result = x / y;            // 定义变量result记录两个数相除的结果
 5            return result;                  // 将结果返回
 6        }
 7        public static void main(String[] args) {
 8            int result = divide(4, 0);    // 调用divide()方法
 9            System.out.println(result);
 10        }
 11    }

编译程序报错,结果如图1所示。

图1 运行结果

文件1中,在调用divide()方法时,由于该方法时声明抛出了异常,所以调用者在调用divide()方法时就必须进行处理,否则就会发生编译错误。从图1可以看出,Eclipse在程序编译时发生了“Unhandled exception type Exception(未处理的异常类型)”的问题,并且给出了两种快速解决的方案。其中“Add throws declaration”表示在方法上继续使用throws关键字抛出异常,而“Surround with try/catch”表示在出现异常的代码处使用try…catch代码块进行捕获处理。

下面对文件1进行修改,在调用divide()方法时对其进行try…catch捕获处理,如文件2所示。

文件2 Example32.java

 1    public class Example32 {
 2         // 下面的方法实现了两个整数相除,并使用throws关键字声明抛出异常
 3        public static int divide(int x, int y) throws Exception {
 4            int result = x / y;      //定义一个变量result记录两个数相除的结果
 5            return result;            //将结果返回
 6        }
 7        public static void main(String[] args) {
 8                try {
 9                int result = divide(4, 0);  //调用divide()方法
 10                System.out.println(result); 
 11            } catch (Exception e) {           //对捕获到的异常进行处理
 12                System.out.println("捕获的异常信息为:" + e.getMessage());
 13            }
 14        }
 15    }

运行结果如图2所示。

图2 运行结果

文件2中,在调用divide()方法时,并没有对异常进行处理而是继续使用throws关键字将异常抛出。从运行结果可以看出,程序虽然可以通过编译,但在运行时由于没有对“/by zero”的异常进行处理,最终导致程序终止运行。

点击此处
隐藏目录