1 throws 关键字
在定义一个方法的时候使用 throws 关键之声明,使用 throws 声明的方法表示此方法不处理异常,而交给方法的调用处进行处理。使用格式如下:
public 返回值类型 方法名称(参数列表...)throws 异常类{ }
实例 1 代码:
package self.learn.exception;
public class Math {
public int div(int i, int j) throws Exception{
int temp = i/j;
return temp;
}
public static void main(String[] args) {
Math math = new Math();
try {
System.out.println("除法操作:"+math.div(10, 2)); // 因为有 throws,不管是否有异常,都必须处理
} catch (Exception e) {
e.printStackTrace(); // 打印异常
}
}
}
运行结果截图:
上面的代码在方法处使用了 throws 关键字,所以不管是否有问题都要使用 try…catch 块进行异常的捕获处理。
2 throw 关键字
与 throws 不同的是,可以直接使用 throw 关键字抛出一个异常。抛出时直接抛出异常类的实例化对象即可。
实例 2 代码:
package self.learn.exception;
public class Exception01 {
public static void main(String[] args) {
try {
throw new Exception("自己抛出的异常!"); //抛出异常的实例化对象
}catch (Exception e) { // 捕获异常
System.out.println(e);
}
}
}
运行结果截图:
提问:为什么要有 throw 关键字 ?
回答: 抛出自己的异常。
实际上 Java 中的异常都是使用 throw 抛出的,只不过这部分代码已经被 Java 隐藏起来。虽然 Java 本身可以自己抛出异常,但是很多时候如果用户定义了自己的异常类型,那么系统肯定是无法抛出的,这个时候只能借助于 throw 抛出异常。
3 范例:throw 与 throws 的应用
package self.learn.exception;
public class Math {
public int div(int i, int j) throws Exception{ // 方法可以不处理异常
System.out.println("*******计算开始*******");
int temp = 0; //声明整型变量
try {
temp = i/j; // 如果产生异常,则执行 catch
} catch (Exception e) { // 捕获异常
throw e; // 把异常交给被调用处处理
}finally {
System.out.println("*******计算开始*******");
}
return temp;
}
public static void main(String[] args) {
Math math = new Math();
try {
System.out.println("除法操作:"+math.div(10, 0)); // 因为有 throws,不管是否有异常,都必须处理
} catch (Exception e) {
System.out.println("异常产生:"+e);
e.printStackTrace(); // 打印异常
}
}
}
运行结果截图:
finally 语句编写的要求
finally 作为异常的统一出口,所以此语句块在编写中尽可能不要出现像 throw 或 return 这样的语句,这样可以避免不必要的问题出现。