第八章 Java高级编程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2013-8-9
24
1、创建线程
创建线程: 1)继承Thread类 将需要独立运行的子任务代码放到从Thread类派生 出来的类的run方法中。 在主线程中原先调用该子任务的地方先创建一个该 线程类的实例,再调用线程类中的start方法启动线程。 2)实现Runnable接口
2013-8-9
25
【例8.6】使用线程技术的记数程序。 在记数过程中,当单击“Close”按钮时,程序 立刻会退出。 程序代码见CounterThread .java。运行结果如下:
注意: 若有多个异常抛出,则用逗号相隔。
2013-8-9
19
9、抛出异常


在声明了异常的方法中,如果出现异常,可抛出 一个异常对象 语法: throw 异常对象
例: ThrowTest.java
2013-8-9
20
10、创建自己的异常类
可以创建自己的异常类,以便对特殊的异常进行处理。 创建的方法很简单:继承现有的异常类。 【例8.3】创建自己的异常类。 程序代码见ExceptionInherit .java。运行结果如下: Throwing MyException MyException: the second constructor! at ExceptionInherit.f(ExceptionInherit.java:18) at ExceptionInherit.main(ExceptionInherit.java:25)
2013-8-9
使用了一个內容为null 的变量 数组元素类型与数组所声明不 合 类转换 (Casting) 失败 传入参数类型不符 您的操作违反安全原則
11
SecurityException
6、Throwable 对象方法介紹
方法 解釋
String getMessage() void printStackTrace()
2013-8-9
22
8.2
Java多线程机制
单进程
单线程
单进程
多线程
2013-8-9
多进程
多线程
23
【例8.5】 未使用多线程技术的记数程序。 当单击“Start”按钮时,屏幕上方的文本框开始递 增记数,从0到48。在记数过程单击“Close”按钮不 起作用,记数依然在继续;当记数到48时,程序退出。 程序代码见Counter .java。运行结果如下:
2013-8-9
6
3、Java 如何定义一个异常
Java 將所有的例外 (Exception),通通宣告成对 象,且全部是 “Throwable” 对象的子孙 java.lang.Object Throwable Error … … … … … … Exception RuntimeException
2013-8-9 10
5、常见 Runtime Exceptions 介紹
例外名稱 ArithmeticException 例外狀況 分母为零时
IndexOutOfBoundsException 索引值超过对象上限时 ArrayIndexOutOfBoundsExce 数组索引值超过上限时 (子类) ption StringIndexOutOfBoundsExc 字串索引值超过上限时 (子类) eption NegativeArraySizeException 当声明一数组时,索引值为负 数时 NullPointerException ArrayStoreException ClassCastException IllegalArgumentException
2013-8-9
8

Runtime Exceptions 运行时异常在JAVA运行时系统内发生。 程序员可处理可不处理,Java 并沒有硬性规定 要拦截此类 Exception。 RuntimeException意味着编程中存在错误, 如果不处理RuntimeException,那么虚拟机 将自动处理:结束该线程并打印异常堆栈。
… … … Java VM Errors Checked Exception Runtime Exception
2013-8-9 7


Java VM Errors 此区所发出的例外事件,Java VM 会自行处理, 不用管它。 Checked Exceptions 在JAVA运行时系统外的代码中发生的异常。 发出的例外事件,是 Java 强迫要求程序员一定 要处理的,如不处理,則 Compile 时期就会发 生错误信息。
2013-8-9
26百度文库
在以上例子的基础上,创建多个记数线程同时记数。 【例8.7】实现多个记数线程的记数程序 。 当多次单击“Add”按钮时,窗口中的文本框会依次增 加,每个文本框都执行自己的记数功能。 程序代码见CounterMultiThread .java。运行结果如下:
2 、实现多个线程
2013-8-9
2013-8-9
2013-8-9 17
【例8.1】 捕获并处理异常 程序代码见 ExceptionExample .java。运行结果如下:
2013-8-9
18
8、 指定方法抛出的异常(声明异常)

Java语言可以不在本方法中直接捕获异常, 而用throw语句将异常抛给上层的调用者 。
格式:在声明方法的同时指定抛出的异常 returnType methodName (参数列表) Throws 异常
void printStackTrace (PrintStream s) Throwable fillInStackTrace()
传回错误信息
打印出 “错误处理调用链” (Error Handling Calling Chain) 至标准错误设备(System.err) 打印出 “错误处理调用链” 至 指定的输出设备 将此错误再度放回 Java VM 中, 供他人继续使用
2013-8-9
21
【例8.4】创建具有更多功能的异常类。 程序代码见ExceptionInherit2.java。运行结果如下: Throwing MyException2 e.value()=4 MyException2: the third constructor!!! at ExceptionInherit2.f(ExceptionInherit2.java:28) at ExceptionInherit2.main(ExceptionInherit2.jav a:35)
2013-8-9
15
多重 catch

如果程序这么写,会发生什么事?
try {} catch (Exception e) {} catch (IOException e) {} catch (RuntimeException e) {} catch (ArrayIndexOutOfBoundsException e) {} finally {}
2013-8-9
9
4、常见 Checked Exceptions 介绍 ClassNotFoundException: 当存取一个不存在或不正确的类时,就会发出 此例外。 DataFormatException: 尝试將一个数值指定給类型不符的变量时,就 会发出此例外。 IOException: 文件不存在,或打开不成功时,就会发出此例 外。 PrinterException: 当打印机发生问题时,会出现此例外。
5
Public class ReadFile { public int Read() 2、Java 异常事件处理法 { try { 打开; 决定文件大小; 分配内存; 将文件读入内存; 关闭文件; } catch (文件打不开) { 清爽又漂亮 return –1; } catch (无法決定大小) { return –2; } catch (内存不够) { return –3; } catch (文件读不进来) { return –4; } catch (文件关不掉) { return –5; } } }

2013-8-9
2
8.1 异常
1、其它語言的异常事件处理法
public class ReadFile { public void Read() { 指定文件不存在 打开文件; 文件尾记号损坏,无法决定大小 决定文件大小; 内存不足 分配内存; 将文件读入内存; 文件毀损,读文件失败 文件他人使用中,无法关闭 关闭文件; } } 程序停止
2013-8-9 4
else {
ErrCode = -3 } 关闭文件; if (文件无法关闭 && 无其它错误) ErrCode = -4; else ErrCode = -5; } else ErrCode = -6; return ErrCode; } }
2013-8-9
杂乱而且原始程序逻辑被 if ~ else 淹沒了
String toString()
2013-8-9
打印出此 Throwable对象的简 短描述
12
相关概念
异常对象: 当一个方法中发生错误时,此方法创建一个 以对象并把它交给运行时系统,此对象被称为 异常对象。 抛出一个异常: 创建异常对象并将它交给运行时系统被称为抛 出一个异常。 捕获一个异常: 选择一个合适的包含可以处理异常的代码块的 方法,并将异常传递给它,这被称为捕获一个 异常。
多个catch 语句是否可随意乱排?????
2013-8-9
14
多重 catch

请先看下列 Exception 继承树: Exception IOException RuntimeException IndexOutOfBoundsException ArrayIndexOutOfBoundsException
27
3 、线程的状态
阻塞状态
sleep()
睡 眠 时 间 到
对 等 I/O notify() 象 待 完 wait() notifyAll() 锁 I/O 成 定
锁 释 放
new() 新状态 start() 异常退出 运行状态 run方法退出
2013-8-9
死亡状态
线程状态及状态转换示意图
28
4、 Runnable接口
2013-8-9 3
public class ReadFile { public int Read() { int ErrCode = 0; 打开文件; if (文件存在) { 决定文件大小; if (文件大小已定) { 分配内存; if (内存足够) { 将文件读入内存; if (读入成功) { 开始操作文件内容; } else { ErrCode = -1; }} else { ErrCode = -2; } }
第八章 Java高级编程
异常处理、多线程机制、流式IO以及 网络通信的基本概念和模型 异常的捕获和处理 多线程的实现及Runnable接口的应用 流式输入输出的操作、文件读写及随 机访问 基于Socket的面向连接的网络底层通 信及高层服务

2013-8-9 1
8.1 异常 8.2 多线程 8.3输入输出流 8.4网络通信及高层服务
2013-8-9 13
7、捕获及处理异常
try { 可能产生异常的代码 //try块 } catch(ExceptionType1 e1) //要捕获的异常类型1 { 对此异常的处理 //异常处理1 } catch(ExceptionType2 e2) //要捕获的异常类型2 { 对此异常的处理 //异常处理2 } ……… [ finally { “善后”工作 } ]
所有的例外,包括 IOException, ArrayIndexOutOfBoundsException, 都会被第一个 catch 收走。 因为所有 Exception 都是 Exception 的子类。
2013-8-9 16
多重 catch

正确写法
try {……} catch (ArrayIndexOutOfBoundsException e) { } catch (RuntimeException e) { } catch (IOException e) { } catch (Exception e) { } finally { } 要由继承树底端对象往上写, 各例外才能 “掉入” 正确的错误处理程序中。
相关文档
最新文档