文档介绍:学习导读
本章将介绍Java语言中的一些高级特性:异常处理、多线程机制、流式IO以及网络通信,其中每个部分都能扩展成一个专题。读者在本章学习到的只是其中很小的一部分,但是能够从中了解一些基本概念和基本操作,为今后的深入学习打下基础。异常处理提供对错误的捕捉和处理机制;多线程机制使得程序的多个子任务能够“同时”执行;流式IO提供了对输入输出的读写机制;网络通信特性允许Java程序通过Socket实现底层通信,并利用Java提供的扩展组件实现高层服务。
第九章Java高级编程
教学重点与难点:
异常处理、多线程机制、流式IO以及网络通信的基本概念和模型
异常的捕获和处理
多线程的实现及Runnable接口的应用
流式输入输出的操作、文件读写及随机访问
基于Socket的面向连接的网络底层通信及高层服务
异常处理
在Java中,提供了错误捕捉和处理机制,即异常处理机制。在程序运行过程中发生错误时,Java允许其不按照正常路径完成任务,由发现错误的方法抛出封装了错误信息的对象(异常)到其调用程序,发出已经发生问题的信号,然后立即退出;而且,程序并不在调用该方法的代码处继续执行,而是由异常处理机制开始搜索一个能够处理这种特定错误情况的异常处理器。
异常分类
Throwable类派生出两个分支:Error和Exception。
Error类被认为是不能恢复的严重错误,如系统内部错误和资源耗尽错误等。不应该抛出这种类型的错误,而是让程序中断。
Exception类定义可能遇到的轻微错误,分为派生自RuntimeException类的异常和非派生自RuntimeException类的异常。这时,可以写代码来处理异常并继续程序执行,而不是让程序中断。
区分RuntimeException和非RuntimeException的规则是:编程错误导致RuntimeException,如被零除、数组越界访问、空指针访问等;而其他异常则是由于意外情况而发生的,如试图读取文件结尾以后的数据、试图打开错误的URL、试图根据并不代表已存在类的字符串来查找Class对象等。
方法如何抛出异常
//本方法从长度为2048字节的某文件中读入数据到字符串对象中。
String readFile(BufferedReader in) throws EOFException
{ ...
while(...)
{//ch为当前读入的字符。
if(ch == -1) //文件尾;
{
//当n<len,意味着还未将文件全部读入字符串,就遇到文件结束标志,视为异常情况。
if(n < len) throw new EOFException();
//或者采用下面的方法:
// if(n < len)
// { EOFException readeof= new EOFException();
// throw readeof; }
}
...
}
return s;}
try
{
可能产生异常的代码//try块
}
catch(ExceptionType1 e1) //要捕获的异常类型1
{
对此异常的处理//异常处理1
}
catch(ExceptionType2 e2) //要捕获的异常类型2
{
对此异常的处理//异常处理2
}
catch(ExceptionType3 e3) //要捕获的异常类型3
{
对此异常的处理//异常处理3
}
【】捕获并处理异常
程序代码见ExceptionExample .java。运行结果如下:
Caught the Exception!!!
(): I throw an Exception!!!
【】重新抛出异常
程序代码见RethrowException .java。运行结果如下:
the original exception in f()
Caught in main
Exception in thread "main" : thrown from f()
at (:8)
at (:14)
我们可以创建自己的异常类,以便对特殊的异常进行处理。创建的方法很简单:继承现有的异常类。
【】创建自己的异常类。
程序代码见ExceptionInherit .java。运行结果如下:
Throwing MyException
MyExcep