- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章:异常
学习目标
异常的概念
自定义异常
方法覆盖和异常
异常的概念在Java编程语言中,异常类定义程序中可能遇到的轻微的错误条件。你可以写代码来处理异常,并继续执行程序,而不需要让程序中止。
在程序执行中,任何中断正常程序流程的条件都是异常。例如,发生下列情况时,会出现异常:
想打开的文件不存在
网络连接中断
操作数超出预定范围
正在装载的类文件丢失
在Java编程语言中,错误类定义被认为是不能恢复的严重错误条件。在大多数情况下,当遇到这样的错误时,建议让程序中断。
在程序中发生错误时,发现错误的方法抛出一个异常到其调用程序,出已经发生问题的信号。然后,调用方法捕获抛出的异常,在可能时,再恢复回来。这个方案给程序员一个写处理程序的选择,来处理异常。
通过浏览API,可以决定方法抛出的是什么样的异常。
异常的分类
在Java编程语言中ava.lang.Throwable类充当所有对象的父类,可以使用异常处理机制将这些对象抛出并捕获。在Throwable类中定义方法来检索与异常相关的错误信息,并打印显示异常发生的栈跟踪信息。它有Error和Exception两个基本子类。
Throwable类不能使用,使用子类异常异常如图:
Error表示。比如说内存溢出。不可能指望程序能处理这样的情况。
RuntimeException表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。比如,如果数组索引扩展不超出数组界限,那么,ArrayIndexOutOfBoundsException异常从不会抛出。比如,这也适用于取消引用一个空值对象变量。因为一个正确设计和实现的程序从不出现这种异常,通常对它不做处理。这会导致一个运行时信息,应确保能采取措施更正问题,而不是将它藏到谁也不注意的地方。
其它异常表示一种运行时的困难,它通常由环境效果引起,可以进行处理。例子包括文件未找到或无效URL异常(用户打了一个错误的URL),如果用户误打了什么东西,两者都容易出现。这两者都可能因为用户错误而出现,这就鼓励程序员去处理它们。
预定义异常
Java编程语言提供几种预定义的异常。下面是可能遇到的更具共同性的异常中的几种:
ArithmeticException:整数被0除,运算得出的结果。
int i = 12 / 0;
NullPointerException:当对象没被实例化时,访问对象的属性或方法的尝试:
Date d = null;
System.out.println(d.toString());
NegativeArraySizeException:创建带负维数大小的数组的尝试。
ArrayIndexoutofBoundsException:访问超过数组大小范围的一个元素的尝试。
SecurityException:典型地被抛出到浏览器中,SecurityManager类将抛出applets的一个异常,该异常企图做下述工作(除非明显地得到允许):
访问一个本地文件
打开主机的一个socket,这个主机与服务于applet的主机不是同一个。
在运行时环境中执行另一个程序try-catch-finally 主动异常处理
throws 消极异常处理
throw 引入异常
实例分析
例1
问题的描述:
写一个常见的异常
解决方案:
请看下例:
public class TestException {
public static void main(String args[]) {
int i = 0;
String ss[] = { Hello world!, 您好,世界!, HELLO WORLD!! };
for (; i 6; i++) {
System.out.println(ss[i]);
}
}
}运行的结果为如图。
要处理异常,将能够抛出异常的代码放入try块中,然后创建相应的catch块的列表,每个可能被抛出异常都有一个。如果生成的异常与catch中提到的相匹配,那么catch条件的块语句就被执行。在try块之后,可能有许多catch块,每一个都处理不同的异常。
请看下例:
class TestException2 {
public static void main(String args[]) {
int i = 0;
String ss[] = { Hello world!, 您好,世界!, HELLO WORLD!! };
for (; i 5; i++) {
try {
System.out.println(第 + (i + 1) + 次循环:);
System.out.println(ss[i
文档评论(0)