Java语言第8章 异常与处理

上传人:梦** 文档编号:59425317 上传时间:2018-11-07 格式:PPT 页数:24 大小:179KB
返回 下载 相关 举报
Java语言第8章 异常与处理_第1页
第1页 / 共24页
Java语言第8章 异常与处理_第2页
第2页 / 共24页
Java语言第8章 异常与处理_第3页
第3页 / 共24页
Java语言第8章 异常与处理_第4页
第4页 / 共24页
Java语言第8章 异常与处理_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《Java语言第8章 异常与处理》由会员分享,可在线阅读,更多相关《Java语言第8章 异常与处理(24页珍藏版)》请在金锄头文库上搜索。

1、8.1 处理错误 8.2 异常的捕获 8.3 finally子句,第八章 异常与处理,8.1 处理错误,假设当Java程序运行时发生错误,有如下3种。 设备错误 物理限制 代码错误,8.1 处理错误,Java中所有的异常都是从Throwable类中继承出来的子类。图8-1所示为一个简化的异常继承层次图。,8.1 处理错误,从图中我们可以看出,所有的异常都是从Throwable类中扩展出来的,并马上分成两个部分,一个是Error,另一个称为Exception(异常)。,8.1 处理错误,对于扩展于RuntimeException,它是由于程序书写产生的错误,例如: 一个错误的造型转换; 一个越界

2、的数组访问; 一个空指针的访问等。 总之,一切的RuntimeException都是由于本身的错误造成的。RuntimeException同Error异常我们叫做未检查异常,这种异常是不应该产生的,除此以外的异常都称为已检查的异常。,8.1 处理错误,如果在Java程序设计中,调用一个方法时,出现Java不能处理的情况,那就应该抛出一个异常。它不仅告诉Java编译器应该返回什么类型的值,而且告诉编译器可能产生什么样子的错误。 在方法中声明一个异常是在方法的头部表示的。利用关键字throws,表示该方法在运行中可能会抛出的异常。,8.1 处理错误,当调用一个抛出异常的方法时,有两种方式可以处理它

3、,一种方式是继续向外抛出,另一种方式就是解决。 所谓继续抛出也就是我们并不对异常做任何处理,只是把这个异常继续向外抛出,那究竟由谁来处理这个异常呢? 所有抛出的异常最终必须要有一个处理这个异常的方法,什么时候在什么位置处理这个异常是根据程序设计的思想来进行的。,8.1 处理错误,首先应该决定抛出一个什么类型的异常,由于涉及文件的读取肯定属于某种IOException,现在我们就用这个父类来表示需要抛出的异常,如: throw new IOException(); 或者: IOException e = new IOException(); throw e,8.1 处理错误,下面的代码就是一个简

4、单的方法体实现,注意由于在方法体内使用了throw关键字,抛出了一个异常,所以在方法声明中,也同样需要throws指定的异常。 public String readData() throws IOException while() throw new IOException(); return s; ,8.1 处理错误,throw与throws的区别 1. throw代表动作,表示抛出一个异常的动作,throws代表一种状态,代表方法可能有异常抛出。 2. throw用在方法实现中,而throws用在方法声明中。 3. throw只能用于抛出一种异常,而throws可以抛出多个异常。,8.1

5、处理错误,设计一个自己的异常类其实是一件很轻松的事情,只要从Exception或IOException中派生一个子类就可以了。一般情况下,这个类要符合下列要求: 有一个默认构造器; 包含一个详细信息字符串参数的构造器。,8.2 异常的捕获,可以说抛出一个异常是相当简单的,抛出这个异常后就不需要再理会它了,但在实际程序设计中,我们必须要有代码捕获这个异常,捕获一个异常必须要有合理的计划与设计,以实现程序的可控制性及合理性。,8.2 异常的捕获,如果想处理一个异常,首先应当捕获这个异常。捕获一个异常是用关键字try来实现的,例如: try Connection conn = DriverManag

6、er.getConnection(strURL, strUser, strPassword); ,8.2 异常的捕获,有可能抛出异常的代码应该放到try块中,如果我们捕获了一个异常,也就必须要处理它,如果不处理它就没有必要捕获了。所以关键字try不会是单独出现的。如果有try块那必须要有catch块。例如: catch(ExceptionType e) ,8.2 异常的捕获,catch块是用来处理异常的,也就是当我们捕获一个异常时,程序将如何响应。 接下来catch块中的参数ExceptionType应该是什么呢?应该是我们所捕获的异常类,如上例中我们捕获了SQLException: catc

7、h(SQLException e) ,8.2 异常的捕获,try/catch块中的代码执行顺序是这样的: 如果try块中的任意代码抛出一个catch块所声明类的异常,那么: 该程序就会跳过try块中的剩余代码; 程序执行catch块中的处理器代码。 如果try块中没有任何代码抛出一个异常,程序就会忽略catch块。 如果try块中抛出一个不属于catch块所声明的异常类,程序会立即退出。,8.2 异常的捕获,如果有多个异常需要处理,那就需要多个catch块,例如: catch(SQLException e) catch(IOException ex) ,8.2 异常的捕获,在通常设计中,我们需

8、要知道异常相关的信息或输出定制的错误信息,例如: catch(SQLException e) System.out.println(“the error is occured“);/定制的异常信息 e.printStackTrace();/打印错误对象的相关描述,由系统自动完成 ,8.2 异常的捕获,在实际的程序设计中,经常会碰到根据一个类型的异常再抛出另一个类型的异常,以最终形成符合我们自己要求的异常设计。这个过程我们习惯上称为异常的再抛出。 抛出同一异常 例如我们在进行数据库的相关操作时,如果数据发生错误,需要进行数据的回滚,但这时我们并不想把这个异常信息屏蔽掉,而是继续放回到传递链中,最

9、终由页面显示给用户。,8.2 异常的捕获,抛出另外的异常 如果在程序设计的过程中,我们需要进行异常的类型变换,也就是说程序处理一种异常的类型,并根据这一类型的异常重新抛出一个新的类型的异常。,8.3 finally子句,当在一个方法内抛出一个异常时,该方法中的剩余代码就会被跳过,那方法所占用的本地资源就不会被释放。一个解决方案就是捕获并重新抛出所有的异常。但这种方案比较麻烦,在Java中提供了一个更好的方案finally子句。 finally子句的功能是无论程序是否有异常抛出,都会执行的子句,目的是释放本地资源。,8.3 finally子句,下面我们说一下程序执行finally子句的几种情况。

10、 代码不抛出异常 在这种情况下,程序首先执行try块中的所有代码,接着它执行finally子句中的代码,然后程序执行try块后面的语句。 代码抛出一个catch块能够捕获的异常 代码抛出一个不被任何catch块能够捕获的异常,8.3 finally子句,由于finally子句具有了catch块的功能,所以在程序中我们可以只有finally子句而不再使用catch块。例如: public boolean executeUpdate(String sql) stmt = null; try stmt = conn.createStatement();/建立一个到数据库的会话 if (debug) System.out.println(“execute update : “ + sql); stmt.executeUpdate(sql); ,8.3 finally子句,finally try stmt.close(); catch (SQLException e2) return false; return true; ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号