点击查看:2015计算机等级考试二级Java入门教程章节汇总
点击查看:2015计算机等级考试二级Java入门教程第七章汇总
7.5 定义自己的异常
定义自己的异常类有两个基本的原因:
在标准异常发生时,希望增加一些信息,那么你叮以重新抛出你自己的异常类对象来完成这项操作。
在你的代码中利用出现的错误状态保证特殊异常类的辨别。
然而,你应该记住在抛出异常时会产生大量的开销,因此,对于"正常地"恢复你期望频繁执行的代码来说,这并不是一种很有效的方法。如果你恢复的代码要被经常地执行,就不应该把它放置在catch块中,而是用一个if-then-else循环。
让我们看看如何创建自己的异常。
定义一个异常类
在你定义异常类时。一定要把Throwable作为超类,否则是不允许的。虽然你可以从任何的标准异常类中派生出新的异常类,但是最好的策略还是从Exception类派生。这将使得编译器能够跟踪程序中抛出这类异常的位置,检查它们被捕获了,还是在一个方法中声明抛出它。如果你使用RuntimeException或者它的一个子类,编译器将检查你的异常类的catch块是否将被禁止。
让我们完成一个例子,看看如何定义一个异常类:
public class BreadfulProblemException extends Exception
{
//Constructors
public DreadfulProblemException()( ) //Default constructor
public DreadfulProblemException(String s)
{
super(s); //Call the base class constructor
}
}
这是你应该提供的最少代码。按照惯例,异常类应该包括一个默认的构造函数和一个参数为String对象的构造函数。超类Exception中存储的信息(事实上,这些信息在Exception的超类Throwable中)将自动地用类名进行初始化,而无论你的类对象使用的是哪一个构造函数。传递给第二个构造函数的String将添加到类名的后面形成异常对象中存储的信息。
当然,你也可以增加一些其他的构造函数,通常,你在标准异常抛出后抛出自己的异常时特别希望这样做。除此之外,最典型的是你想要把实例变量加到存储问题额外信息的类中,再附加一方法来在catch块的代码中获取这些数据。因为你的异常类最终派生于Throwable类,所以它将自动地能够使用跟踪栈。
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |