使用throw和throws引发异常 throw与throws的区别
1. throw语句
throw语句用来明确地抛出一个“异常”。这里请注意,用户必须得到一个Throwable类或其他子类产生的实例句柄,通过参数传到catch子句,或者用new语句来创建一个实例。throw语句的通常形式如下。
throw ThrowableInstance
【示例2】ThrowDemo.java
创建ThrowDemo.java演示throw的相关用法。
ThrowDemo.java的代码清单如下所示。
public class ThrowDemo {
/**
* @param args
*/
public static void main(String[] args) {
int number=0;
try{
number=Integer.parseInt(args[0]);
}catch(Exception e){
throw new ArrayIndexOutOfBoundsException("数组越界");
//System.out.println("非法的数字");
}
System.out.println("你输入的数字为:"+number);
}
}
若不提供参数,会引发数组越界的异常(ArrayIndexOutOfBoundsException即为数组越界异常类,如果想了解异常的详细情况,请参见10.5小节内容)。运行ThrowDemo类,控制台的输出结果如图10.10所示。
执行throw语句后,运行流程将立即停止,throw的下一条语句也将暂停执行。throw后必须抛出一个Throwable类的实例。
图10.10 当参数为空时的输出结果
从图10.10可以看出,throw语句一经执行,后面的语句都不会被执行。
2. throws语句
如果一个方法a可以引发异常,而它本身并不对该异常进行处理,那么a方法必须将这个异常抛给调用以使程序能够继续执行下去。这时候就要用到throws语句。throws语句的常用格式如下所示。
returnType methodName() throws ExceptionType1,ExceptionType2,…{
… //method body
}
在method body中可以是引发异常列表中的任何一种异常及其子类型的异常。thorws用来声明一个方法可能会抛出的所有异常,它跟在方法签名的后面。如果有多个异常则使用逗号将其分开。如果一个方法声明的是受检异常,则在调用这个方法之处必须处理这个异常(一般情况下由调用此方法的类处理)。
【示例3】ThrowsDemo.java
创建ThrowsDemo.java演示throws的相关用法。
public class ThrowsDemo {
/**
* @param args
*/
public static void main(String[] args) {
testThrows(args);
}
public static void testThrows(String[] tmp) {
try {
createThrow(tmp);
} catch (Exception e) {
System.out.println("来自createThrow方法的异常");
}
}
// 抛出可能存在的异常
public static void createThrow(String[] tmp) throws Exception {
int number = 0;
number = Integer.parseInt(tmp[0]);
System.out.println("你输入的数字为:" + number);
}
}
如果方法签名后有throws关键词,则在此方法被调用时,需要在调用方法中用try和catch进行捕获异常,如果不捕获异常,则需要在调用方法中使用throws关键词将异常抛出。代码中的testThrows()方法也可以改为如下所示。
public static void testThrows(String[] tmp) throws Exception {
createThrow(tmp);
}
被调用的方法和调用方法处理异常的关系示意图如图10.11所示。
图10.11 被调用的方法和调用方法处理异常的关系示意图
当覆盖抛出异常的方法时,覆盖方法仅需要声明异常的同类或子类,例如,如果父类方法抛出IOException,则覆盖方法可以抛出IOException、 FileNotFoundException(IOException的子类),但不可以抛出Exception(IOException的父类)。可以在throws子句中声明更少或更多指定的异常。
3. throw和throws语句的组合应用
在实际的应用中,一般都需要throw和throws语句组合应用,就是在捕获异常后,抛出一个明确的异常给调用者。
【示例4】ThrowAndThrowsDerno.java
创建ThrowAndThrowsDerno.java演示throw和throws语句的组合应用。
public class ThrowAndThrowsDemo {
/**
* @param args
*/
public static void main(String[] args) {
testThrow(args);
}
// 调用有异常的方法
public static void testThrow(String[] tmp) {
try {
createThrow(tmp);
} catch (Exception e) {
System.out.println("捕捉来自createThrow方法的异常");
}
}
// 抛出一个具体的异常
public static void createThrow(String[] tmp) throws Exception{
int number = 0;
try {
number = Integer.parseInt(tmp[0]);
} catch (Exception e) {
throw new ArrayIndexOutOfBoundsException("数组越界");
// System.out.println("非法的数字");
}
System.out.println("你输入的数字为:" + number);
}
}
throw语句是编写在方法之中的,而throws语句是用在方法签名之后的。在同一个方法中使用throw和throws时要注意,throws抛出的类型的范围要比throw抛出的对象范围大才可以。
更多阅读
电脑待机与休眠的区别 电脑待机和休眠的区别
电脑待机与休眠的区别? ? 首先确定的是休眠和待机不能下载的。因为硬盘都断电了。?休眠和待机的原理都是吧内存的东西保存住,下次就可以不用重新加载操作系统,但他们最大的不同是前者把内存中的数据临时保存到硬盘中,下次开机就直接
港货与行货的区别 港版和国行怎么分辨
港货与行货的区别——简介港货和行货通常代表从不同销售渠道进入大陆的电子产品,下面简单和大家分享港货和行货的区别。港货与行货的区别——工具/原料聪明的你港货与行货的区别——方法/步骤港货与行货的区别 1、
函数COUNT与COUNTA的区别 excel count和counta
函数COUNT与COUNTA的区别——简介COUNT与COUNTA经常用在Excel统计参数列表中指定项个数的情景中。而两者也是存在这差别的,如果不注意的话,这两个函数就容易搞混;这两个函数应该说很简单,也比较容易掌握,但大多数人可能只知COUNT不知COUN
等离子和液晶哪个好,等离子与液晶的区别 液晶和等离子哪个好
等离子和液晶哪个好,等离子与液晶的区别——简介电视机现在已经进入到了千家万户的家里,而市场上销售量比较好的电视机一般为等离子与液晶这两种材质,那么到底等离子和液晶哪个好呢?等离子与液晶的区别又在哪里呢?小编今天就和大家一起去
转载 鸸鹋与鸵鸟的区别 鸸鹋和鸵鸟的区别
原文地址:">鸸鹋与鸵鸟的区别作者:自然2鸸鹋与鸵鸟的区别(有关鸸鹋知识补充):大家好,我是广州增城珍禽养殖场,主要已养殖鸸鹋,鸵鸟及蓝孔雀为主要品