早期的编程语言(比如C语言)没有异常处理,通常是遇到错误返回一个特殊的值或设定一个标志,并以此判断是不是有错误产生。随着系统规模的不断扩大,这种错误处理已经成为创建大型可维护程序的障碍了。于是在一些语言中出现了异常处理机制,比如在Basic中的异常处理语句“on error goto”,而Java则在C++基础上建立了新的异常处理机制。
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。这种机制为复杂程序提供了强有力的控制方式。同时这些异常代码与“常规”代码分离,增强了程序的可读性,编写程序时也显得更灵活。
异常处理还有一个好处是在你不能确定和处理异常时,你可以不处理,而把问题提交上去。另一方面,异常处理机制使得错误处理代码更有条理,更便于维护。下面,我们看看在Java中如何处理异常。
Java中的异常类
在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
Throwable类有两个标准子类:java.lang.Error和java.lang.Exception即错误和异常。错误Error类一般是指虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这一类错误无法恢复或不可能捕获,将导致应用程序中断。异常Exception类则是指一些可以被捕获且可能恢复的异常情况,如数组下标越界ArrayIndexOutOfBoundsExcepton、数字被零除产生异常ArithmeticException、输入/输出异常IOException等。
提示:Java编译器要求Java程序必须捕获或声明所有非运行时的异常,如:FileNotFoundException、IOException等。因为,对于这类异常来说,如果程序不进行处理,可能会带来意想不到的结果。但运行时出现异常可以不做处理,因为这类异常很普遍,全部处理可能对程序的可读性和运行效率产生影响。
Java异常处理形式
Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
下面是Java异常处理程序的基本形式:
try //执行时程序块 catch ExceptionType1e //对ExceptionType1的处理 catch ExceptionType2e //对ExceptionType2的处理 throw e //再抛出这个“异常” finally |
try程序块和catch语句
遇到一个try语句,“异常”的框架就放到堆栈上面,直到所有的try块内的语句都完成。如果下一级的try语句没有对某种“异常”进行处理, 堆栈就会展开,直到遇到有处理这种“异常” 的try语句。在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。
提示:捕获异常的第一步就是用try…选定你要捕获异常的范围,在执行时,括号内的代码会产生异常对象并被抛出。然后你就可以用catch块来处理异常了。
throw语句和throws语句
throw语句用来明确地抛出一个“异常”。首先,你必须得到一个Throwable类或其它子类产生的实例句柄, 通过参数传到catch子句,或者用new语句来创建一个实例。
下面是throw语句的通常形式:
提示:执行throw语句后,运行流程将立即停止,throw的下一条语句也将暂停执行。这里new运算符用于创建一个Throwable类的实例,在后文的面向对象编程一文中将详细讲解。
throws语句用来标明一个成员函数可能抛出的各种“异常”。对大多数Exception子类来说,Java编译器会强迫你声明在一个成员函数中抛出的“异常”的类型。如果“异常”的类型是Error或RuntimeException,或它们的子类,这个规则不起作用。如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。
提示:当然,你可能对上面的说明不是很明白,不过不要紧,编译运行下面的Java程序(已经为你做了详细的注释)你会理解很多!
现在我们用下面的例程来说明问题:
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 mainString args //main方法开始,程序从此处执行 try //try语句块开始 procedure //调用procedure方法,该方法将Throw(抛出)异常信息 catch IllegalAccessException e //处理IllegalAccessException类型的异常,catch语句块 System.out.println″caught ″ + e |
编程并执行程序,其过程如下:
E/javacode/exception>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输出异常信息。
finally语句
有时为了确保一段代码不管发生什么异常都要被执行,可以使用关键词finally来标出这样一段代码。一个成员函数返回到调用它的成员函数,或者通过一个没捕捉到的异常,或者通过一个明确的return语句,finally子句总是恰好在成员函数返回前执行。
下面我们以一个比较完整的异常处理程序来说明上面所述的各种异常处理语句的使用问题:
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 mainString args try procA catchException e System.out.println″catch″+e procB |
提示:在上面的完整程序中,finally后的大括号内的代码是任何情况下都会执行的。另外,在procB 中,return语句并没有立即返回,这一点应该特别注意。你可以亲自动手,执行上面的程序试试(编译和执行类似于上例)?
到目前为止,关于Java的流程控制已经完全讲完了。要真正理解并掌握它们只有经过大量的练习。而好的方法就是修改上面的每一个程序,让它们实现你想要的功能,并在此基本上理解Java的流程控制。而要写好Java程序,熟悉使用Java的流程控制和异常处理是非常关键的。所以在这两期中,我们用大量的例程来说明Java语言是如何使用流程控制语句的,并且对流程控制中经常使用的异常处理语句做了简单的介绍。
分享到:
相关推荐
Java程序设计基础是编程学习的重要领域,主要涵盖了Java语言的基础概念、语法结构和特性。Java是一种全面面向对象的编程语言,由Sun公司的James Gosling等人于1990年开发,最初命名为Oak,后来因互联网的兴起而更名...
Java程序设计基础是计算机科学领域一个至关重要的课程,主要针对初学者,旨在教授如何使用Java语言进行编程。这个课程涵盖了一系列的关键概念和技术,包括语法、数据类型、控制结构、类与对象、异常处理、集合框架等...
Java程序设计基础教程是入门Java编程的必备指南,它涵盖了从环境配置到基本语法,再到面向对象编程等核心概念。本教程旨在帮助初学者建立起坚实的Java编程基础,并逐步熟悉整个开发流程。 首先,我们从环境配置开始...
本书是Java语言的经典教材,中文版分为基础篇和进阶篇,主要介绍程序设计基础、面向对象程序设计、GUI程序设计、数据结构和算法、高级Java程序设计等内容。本书以示例讲解解决问题的技巧,提供大量的程序清单,每章配...
基础篇从java语言的特点入手,介绍了语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常处理、applet和多媒体、二进制i/o、递归等内容。《Java语言程序设计:基础篇(原书第8版)》可作为...
Java程序设计基础是一本旨在帮助初学者快速入门Java编程语言的教材。Java作为一种广泛使用的高级编程语言,具备面向对象、跨平台执行等特性。本书从程序设计语言的发展历程讲起,介绍了从机器语言、汇编语言、高级...
【Java程序设计基础教程】是入门Java编程领域的重要学习资料,尤其适合初学者。Java是一种广泛应用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)在1995年发布。它以其“一次编写,到处运行”的...
JAVA程序设计 第一章 计算机语言概述 第二章 Java的开发环境 第三章 Java语言基础 第四章 Java面向对象的程序设计 第五章 异常处理 第六章 Java的可重用类 第七章 Java小应用程序Applet 第八章 用户界面 第九章 ...
Java程序设计基础是计算机科学领域中的重要课程,主要教授如何使用Java语言进行程序开发。这份教案将深入浅出地引导初学者掌握Java编程的核心概念、语法结构和编程思想。 一、Java简介 Java是由Sun Microsystems...
但是,我可以根据标题和描述中提到的“Java语言程序设计基础篇第六版英文课后习题答案”,介绍一些Java语言程序设计的基础知识点,这些知识点可能出现在该书的课后习题中。 Java是一种广泛使用的面向对象的编程语言...
《Java程序设计基础(第5版)》是一本深入浅出的Java编程教材,适合初学者和有一定经验的程序员作为学习参考。此书全面覆盖了Java语言的基础概念、语法结构以及编程实践,旨在帮助读者掌握Java编程的核心技能。在本节...
主要讲解了 java基本语法(java语言组成,变量和直接变量,数据类型,语句等);面向对象的程序设计(类,对象等);异常处理和常用系统;图形用户界面;...(配合java程序设计基础教程一起学习效果更佳)
本书是Java语言的经典教材,中文版分为《Java语言程序设计基础篇》和《Java语 言程序设计进阶篇》。基础篇从Java语言的特点入手,介绍了语法结构、面向对象程序 设计基础知识到面向对象程序设计、图形用户界面设计、...
Java程序设计基础是计算机科学领域中的重要组成部分,尤其对于初学者而言,它是进入IT行业的敲门砖。"1+X 初级 Java程序设计基础 1-9 章测试题汇总"是一个针对初级Java程序员的全面学习资源,旨在帮助学习者巩固和...
根据提供的文件标题“Java程序设计 基础篇.pdf”及其描述“Java程序设计,基础篇类书籍详细介绍,强烈推荐新手阅读”,我们可以推断出这本书主要面向Java编程初学者,旨在帮助他们掌握Java编程的基础知识。...
总的来说,Java程序设计基础涵盖了许多关键概念,包括语言基础、面向对象编程、程序结构、异常处理、输入输出、集合框架、多线程、网络编程等。对于初学者而言,熟练掌握这些知识点是进一步深入学习Java开发的基础。...
完整版 Java基础入门教程 Java程序语言设计 06 异常处理 异常和垃圾收集(共27页).ppt 完整版 Java基础入门教程 Java程序语言设计 07 网络编程 JDBC(共21页).ppt 完整版 Java基础入门教程 Java程序语言设计 07 ...
根据提供的信息,“Java语言程序设计 基础篇 第八版 带目录”这本书主要针对初学者介绍了Java编程的基础知识。尽管提供的具体内容部分只包含了下载链接,我们仍然可以根据书名、描述以及标签来推断出书中可能涵盖的...
基础篇从java语言的特点入手,介绍了语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常处理、applet和多媒体、二进制i/o、递归等内容。《Java语言程序设计:基础篇(原书第8版)》可作为...
这些文件是基于Java编程语言的学习资源,源自《Java语言程序设计 基础篇 第10版》一书中的程序清单12_1至12_6。这本书是一本广泛认可的Java入门教程,深入浅出地介绍了Java编程的基础概念和技术。通过分析这些文件名...