公开课学习java基础_第1页
公开课学习java基础_第2页
公开课学习java基础_第3页
公开课学习java基础_第4页
公开课学习java基础_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java基础课(五)舒文林

异常处理

在实际的项目中,程序执行时经常会出现一些意外的情况,这些意外的情况会导致程序出错或者崩溃,从而影响程序的正常执行,如果不能很好的处理这些意外情况,将使项目的稳定性不强。对于这些程序执行时出现的意外情况,在Java语言中被称作异常(Exception),出现异常时相关的处理则称之为异常处理。异常处理是Java语言中的一种机制,恰当使用异常处理可以使整个项目更加稳定,也使项目中正常的逻辑代码和错误处理的代码实现分离,便于代码的阅读和维护。从这个程序执行时的输出可以看出,提示在main线程(thread)中出现了异常,异常的类型为java.lang.NullPointerException,异常出现在ExceptionDemo的main方法中,出现异常的代码在ExceptionDemo.java代码中的第7行。在JDK文档查阅java.lang包,在异常部分可以查阅到关于NullPointerException的详细说明。这里出现该异常是因为对象s没有创建造成的。将程序中的Strings=null;代码替换为Strings=“abc”;即可避免出现该异常JavaAPI中专门设计了java.lang.Throwable类,只有该类子类的对象才可以在系统的异常传递体系中进行。该类的两个子类分别是:Error类该类代表错误,指程序无法恢复的异常情况。对于所有错误类型以及其子类,都不要求程序进行处理。常见的Error类例如内存溢出StackOverflowError等。Exception类该类代表异常,指程序有可能恢复的异常情况。该类就是整个Java语言异常类体系中的父类。使用该类,可以代表所有异常的情况。在JavaAPI中,声明了几百个Exception的子类分别来代表各种各样的常见异常情况,这些类根据需要代表的情况位于不同的包中,这些类的类名均以Exception作为类名的后缀。如果遇到的异常情况,JavaAPI中没有对应的异常类进行代表,也可以声明新的异常类来代表特定的情况。Exception类

RuntimeException及其所有子类该类异常属于程序运行时异常,也就是由于程序自身的问题导致产生的异常,例如数组下标越界异常ArrayIndexOutOfBoundsException等。该类异常在语法上不强制程序员必须处理,即使不处理这样的异常也不会出现语法错误。其它Exception子类该类异常属于程序外部的问题引起的异常,也就是由于程序运行时某些外部问题导致产生的异常,例如文件不存在异常FileNotFoundException等。

该类异常在语法上强制程序员必须进行处理,如果不进行处理则会出现语法错误。Java异常处理语法

抛出异常声明异常异常虽然被抛出了,但是由于抛出异常的代码是在方法或构造方法的内部的,在调用方法或构造方法时一般是无法看到方法或构造方法的源代码的,这样调用的程序员就无法知道该方法或构造方法将出现怎样的异常情况,所以需要有一种语法,可以使得调用的程序员可以看到被调用的结构可能出现的异常情况,这就是声明异常的语法。声明异常的语法类似于药品上的副作用说明,在患者服用药品时,知道药品的正常功能,但是无法详细了解药品的成分以及每种成分的含量(类似于源代码),但是在药品的说明上都有副作用的说明,例如过敏者不能服用等,这些和声明异常的语法在功能上是类似。声明异常的语法格式为:throws异常类名该语法使用在方法和构造方法的声明以后,在throws关键字以后,书写该方法或构造方法可能出现的异常,在这里需要书写异常类的类名,如果有多个,则使用逗号分隔这些异常类名即可。这里需要注意的是:这些异常必须是该方法内部可能抛出的异常异常类名之间没有顺序属于RuntimeException子类的异常可以不书写在throws语句以后,但是另外一类异常如果可能抛出则必须声明在throws语句之后通过在对应的方法或构造方法声明中书写throws语句,使得调用该方法或构造方法的程序员可以在调用时看到对应结构可能出现的异常情况,从而提示对于这些异常情况进行处理,从而增强程序的健壮性。捕获异常及异常处理

在该语法中,将正常的程序逻辑代码书写在try语句块内部进行执行,这些代码为可能抛出异常的代码,而catch语句中书写对应的异常类的类名,在catch语句块内部书写出现该类型的异常时的处理代码。程序执行到try-catch语句时,如果没有发生异常,则完整执行try语句块内部的所有代码,而catch语句块内部的代码不会执行,如果在执行时发生异常,则从发生异常的代码开始,后续的try语句块代码不会执行,而跳转到该类型的异常对应的catch语句块中。在实际程序中,也可以根据异常类型的不同进行不同的处理,这样就需要多个catch语句块,其结构如下:在实际执行时,就可以根据捕获的异常类型不同,书写不同的异常处理的代码了。使用该语法时需要注意,如果这些异常类直接存在继承关系,则子类应该书写在上面,父类应该书写在下面,否则将出现语法错误。例如:这里Exception类是所有异常类的父类,在匹配时可以匹配到所有的异常,所有后续的两个异常处理的代码根本不会得到执行,所以将出现语法错误。在实际使用时,由于try-catch的执行流程,使得无论是try语句块还是catch语句块都不一定会被完全执行,而有些处理代码则必须得到执行,例如文件的关闭和网络连接的关闭等,这样如何在try语句块和catch语句块中都书写则显得重复,而且容易出现问题,这样在异常处理的语法中专门设计了finally语句块来进行代码的书写。语法保证finally语句块内部的代码肯定获得执行,即使在try或catch语句块中包含return语句也会获得执行最后,介绍一下使用异常处理语法时需要注意的问题:书写在try语句块内部的代码执行效率比较低。所以在书写代码时,只把可能出现异常的代码书写在try语句块内部。如果逻辑代码中抛出的异常属于RuntimeE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论