实验:Java异常处理机制(预备知识)
作者:reader1   类别:PHP开发    日期:2018-08-09 11:33:07    阅读:633 次   消耗积分:0 分


实验简介


异常是在程序运行过程中发生的异常事件,比如除 0 溢出、数组越界、找不到文件等,这些事件的发生会导致程序不能正常运行。因此,为了加强程序的健壮性,在进行程序设计时,必须考虑可能发生的异常事件并要做出相应的处理。




实验目的



1.掌握Java的异常处理机制。

2.掌握throw, throws子句及用法。





实验流程



1.简介。


Java 通过面向对象的方法来处理异常。假如在一个方法的运行过程中发生了异常,则这个方法生成代表该异常的一个对象,并把它交给运行时系统,运行时系统会寻找相应的代码来处理发生的异常。我们把生成异常对象并把它交给运行时系统这一过程称作抛出(throw) 一个异常。运行时系统在方法的调用技中查找,从生成异常的方法开始进行搜索,直到找到 包含相应异常处理的方法为止,这一个过程称为捕获(catch)一个异常。



2.异常处理对象。


在 Java 的异常处理体系结构中,它将每个异常看作是一个对象,当程序发生异常时,会抛出这个异常的对象,而这个对象包含发生异常的信息。在java.lang包中Throwable类提供了处理错误和异常的类,包括两个直接的子类。


(1) Error 类

对于程序中出现的错误error,若出现在编译期间,此类错误属于语法错误,并不会产生错误类的对象,这类错误可通过修改代码使得程序正确编译。对于运行期间出现的错误,Java虚拟机将生成Error类的对象,并将此对象抛给运行时系统,由系统处理此类的错误。如动态链接错误,内存溢出错误等。


(2) Exception 类

程序在运行时发生的异常,可以由程序本身抛出并处理。当发生异常时,程序抛出发生异常类的对象,而且提供相应的处理机制,能捕获此类异常对象,并作出相应处理,使得程序得以继续运行。如除数为0(ArithmeticException),输入/输出异常(IOException),数组下标越界异常(ArrayIndexOutOfBounds Exception)等。


随着 Java 语言的不断发展,Java中异常类的数目也在持续增加,异常并不全在 java.lang包里定义,例如FontFormatException 就是在 java.awt包中定义的异常。还有很多异常是用来支持像util、net和io这样的程序包,并且我们使用的第三方类库也可能会有自己的异常类。



3.异常处理机制。


Java语言提供两种异常处理机制:捕获异常和声明抛弃异常;


(1) 捕获异常

在Java程序运行过程中系统得到一个异常对象是,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种

类型异常的方法后,运行时系统把当前异常交给这个方法处理;如果找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。捕获异常是通过

try-catch-finally语句实现的。语法为:


try{
...
}catch(ExceptionName1 e){
 ...
}catch(ExceptionName2 e){
 ...
}
finally{
 ...
}



(2) 声明抛弃异常

当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃异常。声明抛弃异常是在一个方法声明中的

throws子句中指明的。如:


public int read() throws IOException{ ... }


4.try…catch语句。


try…catch语句中的catch分支可以有一个或多个,即可以捕获一个或多个异常,但是至少要有一个catch 语句或是finally 语句。


(1) try 语句

try 语句用大括号{}指定一段代码,该段代码中可能会抛出一个或多个异常,同时,该段代码也指定了它后面catch语句所捕获异常的范围。


(2) catch 语句

catch 语句的参数类似于方法的声明,包括一个异常类型和一个异常对象。其中,异常类型必须是 Throwable 的一个子类。参数异常类型指明了catch 语句中要处理的异常类型, 异常对象则由运行时系统在 try 所指定的代码块中生成并被捕获,catch 大括号中包含对对象的处理,其中可以调用对象的方法。


catch 语句可以有多个,用来分别处理不同类型的异常。Java 运行时系统从上向下分别对每个catch语句处理的异常类型进行检测,直到找到与类型相匹自的catch语句为止。其中,类型相匹配是指 catch 所处理的异常类型需与生成异常对象的类型完全一致或者是异常对象所属类的父类。也可用一个 catch 语句处理多种异常类型,此时异常类型参数应该是多个异常类型的父类,比如直接捕获Exception类,程序设计中要根据具体情况来选择catch语句的异常处理类型。


另外需要注意的是 在使用多条 catch 语句时,异常子类必须在它的任何父类,这是因为使用父类的一条 catch 语句将捕获该类型的对象以及它的任何子异常类的对象。因此,假如一个子类在它的父类之后,那么它将永远不会到达,因此就会产生错误。


版权所有,转载本站文章请注明出处:蜗牛笔记, http://www.woniunote.com/article/60
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}