RSS
热门关键字:
当前位置 : 主页>编程开发>java编程>入门>列表

Java程序设计基础之异常处理

来源:我要研发网 作者: 时间:1970-01-01 点击:



  早期编程语言(比如C语言)没有异常处理,通常是遇到错误返回一个特殊值或设定一个标志,并以此判断是不是有错误产生。随着系统规模不断扩大,这种错误处理已经成为创建大型可维护程序障碍了。于是在一些语言中出现了异常处理机制,比如在Basic中异常处理语句“on error goto”,而Java则在C 基础上建立了新异常处理机制。 字串5

  Java通过面向对象方法进行异常处理,把各种不同异常进行分类,并提供了良接口。这种机制为复杂程序提供了强有力控制方式。同时这些异常代码与“常规”代码分离,增强了程序可读性,编写程序时也显得更灵活。

字串1

  异常处理还有一个处是在你不能确定和处理异常时,你可以不处理,而把问题提交上去。另一方面,异常处理机制使得错误处理代码更有条理,更便于维护。下面,我们看看在Java中如何处理异常。

字串2

  Java中异常类 字串6

  在Java中,每个异常都是一个对象,它是Throwable类或其它子类实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象方法可以捕获到这个异常并进行处理。

字串4

  Throwable类有两个标准子类:java.lang.Error和java.lang.Exception即错误和异常。错误Error类一般是指虚拟机相关问题,如系统崩溃、虚拟机出错误、动态链接失败等,这一类错误无法恢复或不可能捕获,将导致应用程序中断。异常Exception类则是指一些可以被捕获且可能恢复异常情况,如数组下标越界ArrayIndexOutOfBoundsExcepton、数字被零除产生异常ArithmeticException、输入/输出异常IOException等。 字串9

  提示:Java编译器要求Java程序必须捕获或声明所有非运行时异常,如:FileNotFoundException、IOException等。因为,对于这类异常来说,如果程序不进行处理,可能会带来意想不到结果。但运行时出现异常可以不做处理,因为这类异常很普遍,全部处理可能对程序可读性和运行效率产生影响。 字串1

  Java异常处理形式

字串6

  Java异常处理是通过5个关键词来实现:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。

字串9

  下面是Java异常处理程序基本形式: 字串4

try 
//执行时程序块

catch ExceptionType1e
//对ExceptionType1处理

catch ExceptionType2e
//对ExceptionType2处理
throw e
//再抛出这个“异常”

finally 
字串6


字串3

  try程序块和catch语句

字串9

  遇到一个try语句,“异常”框架就放到堆栈上面,直到所有try块内语句都完成。如果下一级try语句没有对某种“异常”进行处理, 堆栈就会展开,直到遇到有处理这种“异常” try语句。在try程序后面,应包含一个catch子句来指定你想要捕捉“异常”类型。

字串3

  提示:捕获异常第一步就是用try…选定你要捕获异常范围,在执行时,括号内代码会产生异常对象并被抛出。然后你就可以用catch块来处理异常了。 字串5

  throw语句和throws语句

字串4

  throw语句用来明确地抛出一个“异常”。首先,你必须得到一个Throwable类或其它子类产生实例句柄, 通过参数传到catch子句,或者用new语句来创建一个实例。 字串4

  下面是throw语句通常形式: 字串6

  throw ThrowableInstance

字串6

  提示:执行throw语句后,运行流程将立即停止,throw下一条语句也将暂停执行。这里new运算符用于创建一个Throwable类实例,在后文面向对象编程一文中将详细讲解。

字串4

  throws语句用来标明一个成员函数可能抛出各种“异常”。对大多数Exception子类来说,Java编译器会强迫你声明在一个成员函数中抛出“异常”类型。如果“异常”类型是Error或RuntimeException,或它们子类,这个规则不起作用。如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它类型。

字串6

  提示:当然,你可能对上面说明不是很明白,不过不要紧,编译运行下面Java程序(已经为你做了详细注释)你会理解很多! 字串1

  现在我们用下面例程来说明问题:

字串3

  class ThrowsDemo  //类名,相应java源文件应该保存成:ThrowsDemo.java
static void procedure  throws Illegal
AccessException //throws语句
//抛出IllegalAccessException类型异常
System.out.println″inside procedure″ //输出文本信息,以说明是在执行proced
ure方法时抛出了异常
throw new IllegalAccessException″de
mo″ //新生成一个Throwable类实例,然后抛出异常

public static void mainString args //main方法开始,程序从此处执行
 try  //try语句块开始
procedure  //调用procedure方法,该方法将Throw(抛出)异常信息

catch IllegalAccessException e
 //处理IllegalAccessException类型异常,catch语句块
System.out.println″caught ″ e
字串3


字串5

  编程并执行程序,其过程如下: 字串7

  Ejavacodeexception>java ThrowsDe
mo
inside procedure
caught java.lang.IllegalAccessExceptio
n demo

  提示:如上面代码所示,我们用了一个完整程序来说明在Java程序中如何使用try…catch…throw等语句。Try…里产生异常被捕获了下来,然后在catch块里进行处理(这里只是输出异常信息)。throws IllegalAccessException标明程序将抛出一个IllegalAccessException类型异常。IllegalAccessException e生成一个异常对象,然后用System.out.println输出异常信息。

字串8

  finally语句

字串9

  有时为了确保一段代码不管发生什么异常都要被执行,可以使用关键词finally来标出这样一段代码。一个成员函数返回到调用它成员函数,或者通过一个没捕捉到异常,或者通过一个明确return语句,finally子句总是恰在成员函数返回前执行。 字串8

  下面我们以一个比较完整异常处理程序来说明上面所述各种异常处理语句使用问题:

字串2

class ExceptionDemo  //异常使用示例,保存为ExceptionDemo.java
static void procA 

try
System.out.println″inside procA″
throw new RuntimeException″demo″
//抛出异常
finally 
System.out.println″procA's finally″ //注意:不管发生什么等会执行!!
static void procB 
 try 
System.out.println″inside procB″
return //返回,实际上是在finally语句执行完后才返回
finally 
System.out.println″procB's finally″
public static void mainString args
 try
procA
catchException e
System.out.println″catch″ e
procB 

  提示:在上面完整程序中,finally后大括号内代码是任何情况下都会执行。另外,在procB 中,return语句并没有立即返回,这一点应该特别注意。你可以亲自动手,执行上面程序试试(编译和执行类似于上例)? 字串3

  到目前为止,关于Java流程控制已经完全讲完了。要真正理解并掌握它们只有经过大量练习。而方法就是修改上面每一个程序,让它们实现你想要功能,并在此基本上理解Java流程控制。而要写Java程序,熟悉使用Java流程控制和异常处理是非常关键。所以在这两期中,我们用大量例程来说明Java语言是如何使用流程控制语句,并且对流程控制中经常使用异常处理语句做了简单介绍。 字串5

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
相关文章