异常处理模型

2024-10-26

异常处理模型(精选8篇)

异常处理模型 篇1

物流以网络流形式运行, 如客货运输、水流调度、石油或天然气输送、煤炭储运等。在进行网络流分析时, 将运输中要经过的城市、调水要流过的水库等可以看成图的顶点, 把道路、河流等看成图的有向边 (或称为弧) 。如果只考虑有向边的容量, 常常不够用, 于是要考虑顶点的容量[1]问题。一般来说, 由于顶点环流不影响主流运算, 在研究网络流时, 常常把它略去。但是, 在处理网络异常时, 发现顶点环流可以用于处理网络流中突发的异常事件的数学模型上。例如网络中有一条边的流量突然改变, 影响网络运行, 通过顶点环流变化, 能使异常得到及时处理。这里提出一种基于图论中顶点环流的数学模型, 使用计算机模拟预测和处理网络流方面突发的异常事件。

1问题提出

处理网络流异常的原则, 是最大限度地保障网络流的正常运行。根据这个原则, 要求网络流异常处理数学模型有以下功能: (1) 显示原来网络流正常运行过程; (2) 出现突发的异常事件后, 立即进行三种工作:报警、应急处理和异常事件发展预测; (3) 制定调整网络流的理想方案; (4) 进行局部网络流调整; (5) 显示调整后的运转过程。

2预备知识

2.1网络概念

对于一个网络D= (V, E, C) , 设D是一个简单有向图, 其中V是顶点集, E是弧集;在V中指定了一个顶点, 称为源点 (记为Vs) , 指定另一个顶点, 称为汇点 (记为Vt) , 其余的为中间点;对于每一条弧 (Vi, Vj) ∈E, 对应有一个C (i, j) ≥0, 称为弧的容量。所谓网络上的流是指定义在弧集合E上的一个函数F={f (i, j) }, 并称F (i, j) 为弧 (Vi, , Vj) 上的流量。

定义1满足下述条件的流F称为可行流:

(1) 容量限制条件

对每一条弧 (Vi, Vj) ∈E, 0≤f (i, j) ≤C (i, j) 。 (1)

(2) 平衡条件

对于除源点和汇点外的中间点, 有:流出量=流入量。

所谓割是指容量网络中的源点和汇点分割开来, 并使Vs到Vt的流中断的一组弧的集合[2]。即在网络D= (V, A, C) 中, 若点集V被分为两个非空的集合Vc和Vc, 使Vs∈Vc, Vt∈Vc, 则称弧集 (Vc, Vc) 为网络D的一个割集。

定义2割的容量是组成它的集合中各弧的容量之和[2]。即给定一个割集, (Vc, Vc) , 称此割集中所有的弧的容量之和为这个割集的容量, 记作

式 (2) 中V (f) 称为这个可行流的流量, 即源点的净输出量 (或汇点的净输入量) 。可行流总是存在的。例如:令所有弧的流量f (i, j) =0, 就得到一个其流量V (f) =0的可行流 (称为零流) 。

最大流问题即求一个流{f (i, j) }, 使其流量f (V) 达到最大, 并且满足:

定理1最大流最小割定理[1]:在网络D中, 源点Vs到汇点Vt的最大流的值等于它的最小割的容量。

2.2有容量的顶点表示

定义3当“流入顶点的量与流出顶点的量相等”[2]这个平衡条件成立时, 若把顶点Vi看作一个中转站, 那么, 中转站就有个最大中转能力, 称之为中转容量, 用Cvi表示, 且Cvi<∞;而中转的流量, 就是f (vi) , 且f (vi) ≤Cvi, 称之为中转流。这个定义称为中转容量定义[3]。

有中转容量限制的顶点用图1表示。因而, 可以将顶点分开为两个顶点, 分别记为V-i和V+i, 称为入点和出点。

定义4有中转容量的顶点分开之后, 将原有的弧头都连接到入点上, 将所有的弧尾连接到出点上, 从V-i到V+i只有一个弧。有中转容量限制顶点分开情形用图2表示。

顶点分开后, 最大流最小割定理仍然成立, 因为满足该定理的所有条件。根据定义, 有如下性质。

环流性质1 有中转容量的顶点分开后, 入点V-i入度≥1, 出度=1;出点V+i入度=1, 出度≥1。

根据定义4不难看出, 若入点的出度>1, 则必有出点的入度>1。

2.3有环流容量的顶点表示

定义5 如果顶点带有一条自返弧, 其弧头和弧尾都是该顶点, 这条弧具有的容量, 称之为环流容量, 这条弧称之为环流。如果顶点带有n条自返弧, 称为重数为n, 则可以叠加在一起, 算作一条环流。

顶点的环流不影响主流的运行, 一般情况下可以略去。当顶点分开成为入点和出点时, 顶点表示法就有了新的意义。

定义6 如果顶点有中转容量, 并且有环流容量, 称为有中转容量和环流容量的顶点。如图3所示。

考虑环流有以两种实际背景。第一, 环流也可以看成一个与河水相通的水库, 有自己的水量和容量, 一般不影响河水的流量;当河水多时, 向水库注水;河水少时, 水库向河流放水。第二, 环流可以理解成为一条环形护城河, 而护城河水保持自己的容量、流量和循环流动;中转流是流入护城河, 并能流出的一段河流, 中转流的流量是河水的流量, 这时, 护城河相当于水库。若中转流量与护城河水流量保持互不影响状态, 在考察河水流量时, 就会略去护城河水的流量。根据以上分析, 当采用把有容量的顶点分开的方法来表示时, 就可以把环流和中转流考虑进去了。

有环流时顶点分开的表示法: 将顶点V分开为两个顶点, 分别记为V-iV+i, 按照入点在V-i和出点在V+i的方法, 用C+vi (f+) 表示从V-iV+i的环流容量和环流量, 这样将引起不平衡, 如图4所示, 所以要增加一个C-vi (f-) 表示从V+iVi-环流容量和环流量, 这样使得初始环流平衡, 不影响通过顶点的中转流。如图5所示有环流和中转流的顶点分开图。

环流性质2 如果有顶点带容量, 并且带有环流, 那么顶点的环流是由负向流C-vi (f-) 和正向流C+vi (f+) 这两个流组成, 它们的容量相等, 其流量大小相等, 方向相反, 成对出现, 保持运行中的平衡。如图5有环流和中转流的顶点分开图所示。

不难看出:若环流表示不是成对出现的, 而是一个流向, 那么在无源的情况下, 流出后, 在道路上凭空增加了流量, 则网络流不平衡, 所以必须有一对, 保持平衡。

在图 5中, 最大流最小割定理是不成立的, 因为它有重边, 不符合环流性质1, 没有保持在V-i出度为1, 在V+i入度为1的性质;它不是简单图, 需要进行变换, 才能使它也满足该定理的所有条件。

根据图 5, 考察在顶点分开后入点V-i和出点V+i的流情况。若中转流和环流均对于入点和出点有

f1+f2=f3+f4=fvi, 且f-=-f+, 且: (1) 在V-i点, f1+f2+f- =f++fvi平衡; (2) 在V+i点, f++fvi=f-+f3+f4平衡。即流入顶点Vi的流量=流出顶点Vi的流量。

因为环流 |f+|=|f-| 大小相等, 方向相反, 不改变中转流的性质。在容量计算上, 有以下两种情况。

第一种情况, 环流没有影响中转流, 可以不计算环流, 那么环流可以省略掉, 图形为简单图, 符合使用最大流最小割定理条件。那么, 其容量是C (fvi) , 即中转容量顶点定义。

第二种情况, 环流可能影响中转流, 要计算环流, 把中转流与正向环流合并称为顶点流, 这样将图5转化为图6所示的有顶点流的顶点分开图, 图中有重数的弧合并为一个弧, 使得原来非简单图成为简单图, 符合可行流的平衡条件, 也符合使用最大流最小割定理条件。

定理2 若顶点的中转流和环流保持在入点和出点的平衡, 则顶点容量值等于中转流容量和环流的正向容量之和, 顶点流的值等于中转流和环流的正向流值之和, 而环流的负向流值保持不变, 维持平衡。

证明 由图5条件, 得下列公式, 即合并后顶点容量值等于中转流容量和环流的正向容量之和, 顶点流的值等于中转流和环流的正向流值之和, 且能维持平衡。即有下列公式:

Ci (fi) =C (fvi) +Cvi+ (f+) (4)

fi =fv+f+ (5)

图6不但能保持流入量等于流出量, 也保持了入点V-的入度为n, 且n≥1, 出度为1;而在出点V+的入度为1, 出度为n≥1, 符合环流性质1。

2.4具有容量的顶点分开表示法中的割

定义7 设G是一个点和边均有容量的网络, Vs和Vt分别是G的源点 (发点) 和汇点 (收点) 。对点子集SVVs, Vt}, 若在G-S中不存在值为正的流, 则称S为网络G的顶点割。称

C (S) =xSc (x) (6)

S的割容量。割容量取最小的顶点割称为最小顶点割[4]。

注意:这里, 在条件G中所有的点和边的容量均不为零的条件下, 定义中提及的“在G-S中不存在值为正的流”等价于在“在G-S中不存在有向 (Vs, Vt) 路”。 为了区分最大流最小割定理中所说的割和顶点有容量的网络中的割, 前者可称为边割, 后者就称为顶点割。

定理3 最大流最小顶点割定理 设G是仅中间点具有限制的、点和边均有容量的网络, 并且G中没有边 (Vs, Vt) , 其中Vs和Vt分别是G的源点 (发点) 和汇点 (收点) , 则G的最大流的值等于G的最小顶点割的容量。这是 (定理1) 最大流最小边割定理的推广[2]。

2.5流量异常问题

定义8 当流入顶点和流出顶点的量不平衡时, 所引起的问题称为流量异常。

即:

{fs>ftfs=ftfs<ft

(7)

3数学模型

3.1顶点有中转容量并且有环流的图的概念

定义9 对于一个网络D= (V, E, C) , 设D是一个简单有向图, 其中V是顶点集, E是弧集;在V中指定了一个顶点, 称为源点 (记为Vs) , 指定另一个顶点, 称为汇点 (记为Vt) , 对于每一条弧 (Vi, Vj) ∈E, 对应有一个C (i, j) ≥0, 称为弧的容量;如果图中的一个顶点, 对应一个Cvi≥0, 且只起限制流量通过的作用, 则称之为顶点的中转容量, 这时把顶点分开为两个顶点, 分别称为入点V-i和出点V+i的图来表示。要将所有的入度连接到入点V-i上, 将所有的出度连接到出点V+i上, 由一条弧 (V-i, V+i) 将两个分开的顶点接起来。如果顶点还存在一个有存储作用的环流, 则在图中用两条容量相等, 方向相反的两条弧表示, 它们称为正向弧 (V-i, V+i) 和负向弧 (V+i, V-i) , 分别对应容量为C+viC-vi, 将中转容量与正向弧容量合并后, 记为Ci=C-vi+C+vi, 称为顶点的容量。

这样的图称为有顶点 (环) 流的图, 所对应的网络称为顶点有环流的网络。如图7所示简单有向图, 可扩展为图8所示顶点有环流的网络图。根据图8上的数字, 可判定异常。

所谓网络上的流是指定义在弧集合E上的一个函数F={F (i, j) }, 并称F (i, j) 为弧 (Vi, , Vj) 上的流量。有环流的网络图符合这个定义, 因为它满足了简单图的条件。

注意:若有多个源, 将添加一个虚拟源作为Vs, 建立Vs到各源点的弧;若有多个汇, 将添加一个虚拟汇Vt, 各汇到虚拟汇 Vt的弧。简单有向图建立之后, 用邻接矩阵表示。

3.2顶点邻接矩阵与扩展邻接矩阵

设图顶点集V={Vs, V1, V2, …, Vn, Vt}, 如果用其邻接矩阵A0中的元素表示两个相关顶点的弧上的容量或流, 其形式如下。

A0=[ (Vs, Vs) (Vs, V1) (Vs, V2) (Vs, Vt) (V1, Vs) (V1, V1) (V1, V2) (V2, Vt) (V2, Vs) (V2, V1) (V2, V2) (V2, Vt) (Vt, Vs) (Vt, V1) (Vt, V2) (Vt, Vt) ]

因为顶点是有中转容量的, 所以 (Vs, Vs) , (V1, V1) , (V2, V2) , …, (Vn, Vn) , (Vt, Vt) 不全为0。即, 矩阵的对角线上的元素不全为零。

元素 (Vs, Vt) 和 (Vt, Vs) 不是对角线上的元素, 而且为0, 因为在最大流最小割应用中, 源不能直接到汇, 而汇不能到源。如图7所示的的简单有向图。

顶点分开后, 其图形如图8所示顶点分开的有环流的网络图, 其扩展的邻接矩阵A1为

A1=[ (Vs-, Vs-) (Vs-Vs+) 00000000 (Vs+, Vs-) (Vs+, Vs+) (Vs+, V1-) 0 (Vs+, V2-) 0 (Vs+, Vn-) 0 (Vs+, Vt-) 000 (V1-, V1-) (V1-, V1+) 000000 (V1+, Vs-) 0 (V1+, V1-) (V1+, V1+) (V1+, V2-) 0 (V1+, Vn-) 0 (V1+, Vt-) 00000 (V2-, V2-) (V2-, V2+) 0000 (V2+, Vs-) 0 (V2+, V1-) 0 (V2+, V2-) (V2+, V2+) (V2+, V2-) 0 (V2-, Vt-) 0000000 (Vn-, Vn-) (Vn-, Vn+) 00 (Vn+, Vs-) 0 (Vn+, V1-) 0 (Vn+, V2-) 0 (Vn+, Vn-) (Vn+, Vn+) (Vn+, Vt-) 000000000 (Vt-, Vt-) (Vt-, Vt+) (Vt+, Vs-) 0 (Vt+, V1-) 0 (Vt+, V2-) 0 (Vt+, Vn-) 0 (Vt+, Vt-) (Vt+, Vt+) ]

3.3有环流的图与邻接矩阵的特征

3.3.1 有环流的图是个简单图

顶点有容量、有环流的图, 通过将顶点分开成入点和出点后, 顶点有容量就变换成为顶点无容量的图了, 通过中转容量与正向弧容量合并后, 有环流的图中没有了重数, 那么这类图就又成为了简单图了, 这里所说的邻接矩阵都是关于简单图的。

3.3.2 有环流的图的邻接矩阵的特征

环流性质3 当原来顶点分成入点和出点后, 新图性质由它的扩展矩阵表示出来。

(1) 图中顶点的数量由原来的n个增加到2n个, 扩展的邻接矩阵的元素个数是原来的4倍, 那么计算量增加了, 但是其复杂度的量级未变, 是可以接受的。

(2) 因为扩展后的顶点是无容量的, 扩展矩阵主对线上全为0, 即 (V-s, V-s) , (V+s, V+s) , (V-1, V-1) , (V+1, V+1) , (V-2, V-2) , (V+2, V+2) , …, (V-n, V-n) , (V+n, V+n) , (V-t, V-t) , (V+t, V+t) 全为0。

(3) 中间点 (非源点、非汇点) 分成入点V-i和出点V+i以后, 从入点V-i到出点V+i只有一个弧, 即 (V-i, V+i) , i=1, 2, 3, …, n

给定一个出点V+j (作为弧尾) 都有可能连接到任意入点V-i, 即有 (V+j, V-i) i=1, 2, …, n

任意一个出点V+都可能连接到给定的入点V- (作为弧头) , 即有 (V+i, V-j) i=1, 2, …, n

V-s是源点的入点, 在正常时, 只有一条出弧到达V+s, 所有从源出来的流, 都是通过这个出弧流到V+s后, 又流向其他入点的。

V+t是汇点的出点, 也是最终点, 正常时, 只有一个入弧, 也就是从V-t到达V+t的一条弧, 所有的出点都要注入V-t后, 再汇到这一条入弧到达V+t。

(4) 发生出超异常时, 要增加一个源V-s到V-i的虚拟弧, 即 (V-s, V-i) , 作为一种平衡状态供计算时使用。同理, 在出点V+i发生入超异常时, 要增加一个V+i到汇V+t的虚拟弧, 即 (V+i, V+t) , 也作为一种平衡状态供计算时使用。

(5) 而 (V+s, V-t) 或 (V+t, V-s) 为0, 因为在最大流最小割应用中, 源不能直接到汇, 而汇更不能到源。

3.4异常处理

处理异常要有检测异常、确定异常范围、环流阶跃改变保持网络平衡等步骤。

3.4.1 异常检测方法

定理4 对于邻接矩阵A1, 存在一个数δ, 可以用下面的检测算法得到。

(1) 在检测程序算法中, 若式 (8) 成立, 则进入第j个顶点Vj的流等于从第j个顶点流出的流。是于正常流。

δ=i=1nf (i, j) -i=1nf (j, i) =0 (8)

(2) 在检测程序算法中, 若下式成立, 则进入第j 个顶点Vj的流小于从第j个顶点流出的流。是出超异常。

δ=i=1nf (i, j) -i=1nf (j, i) <0 (9)

(3) 在检测程序算法中, 若下式成立, 则进入第j个顶点Vj的流大于从第j个顶点流出的流。是入超异常。

δ=i=1nf (i, j) -i=1nf (j, i) >0 (10)

注意:这个公式中的下标是从1开始到2n结束, 对应1到n个顶点分开后的情形。

3.4.2 确定异常范围的参数

定义10 顶点容量界限:中转容量与中转流Cvi (fvi) , 环流容量与环流C+vi (f+) 和C-vi (f-) , 且C+vi=C-vi顶点流容量与顶点流, Ci (fi) 。

定理5 若已知未发生异常时的可行流f ,

若环流增加量等速, 当 > C+vi>C-vi时, 那么引起上溢。 (11)

若环流减少量等速, 当 < C+vi<C-vi时, 那么引起下溢。 (12)

而且:上溢周期数计算 Tn1= (Cvi- f+) /δ (13)

下溢周期数计算Tn2= f+/δ (14)

根据式 (11) —式 (14) 来预测异常发展达到的边界值, 为处理异常的网络流提供数据。

3.4.3 环流增减方式与网络流变化

察网络运行实况, 它有周期存在。例如交通网络中, 每天定时的列车或汽车的班车以天为周期运行。

定义11 若在相等的时间内, 有相同的运行事件发生, 记这个时间为同期, 记为T

处理异常在周期T内运行, 某日的异常事故, 影响当日, 或者影响几天的情况都有发生。每到出现异常事故, 总要进行一些调整。基于图论模型的处理过程行描述如下。

报警功能

对于入超异常, 在周期T1内, 处理方法如下。

第1步:在周期T1内, 根据条件判断, 有f+ , 且是否有入超 “δ1> 0”

若无入超, 也无出超, 则表示正常。否则, 若有入超, 则进行第2步。

第2步:若f++δ1 <Cvi+, 那么, 增加一个出点V+i直到汇点V+t的弧 (V+i, V+t) , 弧上面的流由Cvsi (δ1) , 使其成为可行流。报警, 可自动控制或调节的网络异常, 进行自动控制处理阶段。进入第3步。

否则, f++δ1 >=C+vi, 报警, 是特大异常, 不可自动控制异常。进入第4步。

应急功能

第3 步:令f+=f++δ1, 再令f-=f+, 去掉弧 (V+i, V+t) 。这种异常处理使得网络平衡, 相当于处理应急事件, 将运不走的“流”存入本地的“环”中, 环中的流增加了, 这是环流的作用。进入第4步。

第4步:调整网络流运行方案, 可用多种方法。

改变网络环流条件, 为周期T2作准备。

预报功能:若有入超条件保持不变, 将导致几个周期T后的某个周期中T, 超过其容量。

进行局部网络流调整操作:

入超条件改变的方法有: (1) 减少进入顶点的流; (2) 增大流出; (3) 减少流入或增加流出同时进行等。由于网络流是相关的, 可能要调节多条路上的流量。进入第5步。

显示调整后的运转过程:

第5步:在周期T2内判断条件, 若这时仍有f+ < Cvi, 存在, 但入超 δ2 =0, 那么就意味着环流不再增加, 达到平衡, 异常处理告一段落;否则入超δ2 > 0, 那么, 重复第1, 2, 3, 4步, 增加从V+i到汇点V+t的弧, 使其平衡。

重复以上各步骤, 总有一个周期Tn, 因条件改变原因, 使得入超 δ=0, 或者有f++δ >Cvi+为止。

这里增加环流是在改变周期时完成的, 中间无过渡状态, 是阶跃性质。

异常在周期T1内出现, 一般不可能在T1内进行全面的网络流调节, 所以用1、2、3步来处理异常, 这就是用环流调节网络流, 是异常事件应急处理模型, 在第4步, 改变的条件有多种方法。例如重新计算整个网络的最大流和最小割, 将网络流调整成为最佳, 是一种基于图论的调整方法。网络流条件调整, 是列车在第二天执行新运行时刻表时的模型。在计算最小割的时候, 可能计算出的割是边割, 也可能是顶点割。

对于出超异常, 在周期T1内, 处理方法如下。

第1步:根据条件判断, 有f+, 且δ1> 0;

第2步: 若0 < f+ -δ1 < Cvi+, 那么, 增加从源点V-s直到入点V-i的弧 (V-s, V-i) , 弧上面的流由Cvsi (δ1) , 使其成可行流;

第3步:令f+=f+-δ, 令f-= f+, 去掉弧 (V-s, V-i) ;

第4步:改变网络环流条件, 为周期T2作准备。

第5步:在周期T2内判断条件。如果条件改变, 使得 出超 δ2=0, 那么就意味着环流减少, 达到平衡;如果出超δ2 > 0, 那么, 重复第1, 2, 3, 4步, 增加从源点到V-i的弧, 使其平衡。

重复以上步骤, 总有一个周期Tn, 使得入超 δ=0, 或者有f+ -δ < 0为止。

3.5异常成对性质

环流性质4 在可行流运行中, 如果一条弧上的流量改变, 则会影响与这一条弧相关联的两个顶点的平衡流量, 则两个顶点都要出现异常, 因而, 称为异常成对性质。

4用法举例

4.1正常网络系统和异常出现

设正常网络系统如图7所示, 从源点Vs向汇点Vt运送救灾物资, 经过V1、V2、V3和V4这四个城市, 每天运输量为60, 系统要求必须保障送到目的地。城市顶点有中转容量和中转流量, 且有一定的救灾物资储备能力即环流容量, 其值是网络图中所标的值, 网络顶点用分开后的顶点图如图8所示, 图中顶点的中转流和正向环流合并为顶点流, 网络中的流是可行流。

道路总通行量是由多道同向路合计而成, 即有30 (30) 。因某条道路现事故不能通行, 道路, 即图中的弧 (V+1, V-2) 上的容量和流发生变化, 由30 (30) 改变到20 (20) 的时候, 在V+1处出现入超异常, 在V-2处出现出超异常。则图9就是顶点有环流的异常处理图。

4.2异常处理

1) 在周期T1内, 检测出 (V+1, V-2) 上的容量和流发生变化, 由30 (30) 改变到20 (20) , 即判断异常性质:在V+1处出现入超异常, 即流入量=60, 流出量=20+10+20=50, δ=60-50=10>0;在V-2处出现出超异常, 即流入量=20+20=40, 流出量=50, δ=50-60=-10<0 。

2) 连接源点V-s直到入点V-2的弧 (V-s, V-2) , 标出10 (10) , 使V-2处平衡, 流入流出;连接点V+1直到汇点V+t的弧 (V+1, V+t) , 标上10 (10) 。即应急处理, 让在V+1处运不走的物资存在V1城市 (相当于虚拟汇点) , 让V-2处不足的物资源使用V2城市的储备物资运向汇点 (相当于虚拟源点) 。

3) 令f+=f++δ1, 再令f-=f+, 去掉弧 (V+i, V+t) 。相当于增加环流, 即V1城市将运不走的物资放到储备仓库。令f+=f+-δ, 令f-= f+, 去掉弧 (V-s, V-i) 。相当于将环流减少, 相当于V2城市储备物资运送到汇点。

4) 在上述应急处理期间, 考虑重新调整网络流向。计算出, 按照原来的运输方案, 有:

(环流容量50-环流量20) / 存入量 (虚拟汇入量) 10其结果等于3, 即V1城市三天后将达到 (环流) 存储上限。环流量20 / 环流减少量 (虚拟源流出量) 10=2 , 即V2城市两天后的存储物资 (环流) 将运完。

利用最大流最小割定理, 计算并制定新的方案, 协调各城市运输能力, 新方案可以由图10表示。

5) 若上述道路事故在1-2天内解决, 第3天可以按原运输网络方案进行, 保持物资运输不受影响, 超过2天, 就可以使用如图10中的新方案。

5结语

图论中顶点有环流的图转化为简单图的方法, 作为物流类网络异常处理的模型, 符合实际。使用其数学模型中的邻接矩阵, 可以方便地进行计算。图中的数据计算用VC++语言编程实验得出。这个模型可以用来模拟交通运输网络中道路桥梁不能通行、局部地区突降暴雪、发生地震等突发灾害等异常事件对周边地区的交通网络影响的情形。利用这个方法, 用于预测、模拟或处理突发事件, 可以节约大量成本。

摘要:物流以网络流方式运行, 网络中顶点有中转容量, 同时也有顶点环流容量, 顶点环流使用顶点分开为入点和出点的方法来表示。当网络流发生异常变化时, 可引起顶点环流增加或减少的变化;而顶点环流也可以起到对网络流异常的调节作用, 使网络保持一个可行流。

关键词:网络流异常,顶点环流,可行流,邻接矩阵

参考文献

[1]Ahujia R K, Magmanti T L, Orlin J B.Network floews:theory, algo-rithms and applications.New Jersey:Rentice-Hall, 1993

[2]王朝瑞.图论 (第三版) .北京:北京理工大学出版社, 2001:291─292

[3]张先迪, 李正良.图论及其应用.北京:高等教育出版社, 2005:250─253

[4]张宪超, 江贺, 陈国良.顶点和边都有容量的有向平面网络中的最小截和最大流.计算机学报, 2006;29 (4) :545—546

变电设备事故及异常处理 篇2

摘要:电力设备的正常工作是电力系统稳定运行的基础,本文作者总结了平时工作常见的变电设备事故类型,分析了造成事故的原因和处理方法,对指导变电设备的实际运行具有重要的参考价值。

关键词:变电设备;事故处理;变压器;故障

当前,保证变电设备的安全稳定运行,对电力系统的安全和稳定具有重要意义。变电设备一旦发生故障,如不能及时消除,会酿成大面积停电,将给社会带来灾难性后果。因此,提高变电设备的安全系数,对变电设备发生的事故及异常进行合理的处理,是避免事故扩大的有效措施。本文作者根据自身实际工作经验,对变电设备事故及异常处理进行了分析与研究。

一、运行事故及异常处理原则

1.事故及异常处理的主要责任

变电设备事故及异常的处理,必须严格遵守相关的工作规程。在事故处理的过程中,运行人员必须坚持“安全第一,预防为主”的方针,认真贯彻落实安全生产责任的制度和履行岗位责任的制度,努力完成工作任务,尽职尽责,以确保变电设备的运行安全。运行人员对于变电设备安全的主要责任为:

(1)依据调度的相关指令正确地进行倒闸操作。

(2)当发生事故、障碍时,按规定及时进行处理和汇报。

(3)完成电气设备工作的安全措施,办理工作票的开工和完工手续,对设备进行完工验收。

(4)当运行方式改变、恶劣天气、设备存在严重缺陷和缺陷有发展时,认真做好事故的预想。

(5)按规定进行故障处理,认真做好各种记录和报表。

2.事故及异常处理的顺序

运行人员要首先根据相关计量表及继电保护装置的动作情况判断故障的范围和可能发生故障的变电设备;其次必须重点检查相关的变电设备是否有运行的异常情况及异常的动作情况,以进一步地准备分析事故的性质和范围,必要时可立即采用措施,隔离出现问题的变电设备,以避免事故的进一步扩大。在分析相关事故的同时,运行人员还必须将异常情况及事故报告给调度,如果是严重的威胁生命的事故,必须立即给予切除或停止相关设备的运行,如果自动保护装置失灵未动,应手动给予切除。未影响到系统正常运行的变电设备,应最大限度地保障其安全稳定运行。

3.事故及异常处理的注意事项

(1)保障变电站自身的用电。变电站的相关操作需要以变电站有电为基础,如果变电站没有蓄电池或者变电站的蓄电池不够好用,则将更加凸显站用电的重要性。如果失去站用电,则一定会使的事故处理起来更加的困难,在规定的时间内必须首先恢复站用坏相关的变电设备。

(2)避免故障的范围的进一步扩大。变电设备故障及异常情况处理时,非常重要的原则就是避免事故的范围进一步的扩大,最大限度地减少损失。如果因为运行人员故障时的紧张而进行错误的操作,则会带来巨大损失,甚至可能引发电力系统连锁的大停电事故。

(3)尽快处理变电设备事故。变电设备故障及异常情况造成的事故必须尽快地处理,因为这些小的事故是电力系统的薄弱环节,为确保电力系统的安全、稳定运行,必须尽快消除这些薄弱环节,避免发生巨大的灾难性的事故。

二、输电线路异常及故障处理

线路故障的原因很多,情况也比较复杂。如站内线路出现设备支撑绝缘、线路悬吊绝缘子闪络,大雾、大雪等天气原因造成沿面放电,树枝、动物引起对地、相间短路等瞬时性故障;设备缺陷、施工隐患、外物挂断线路、绝缘子破损等永久性故障,以及瞬时性故障发展为永久性故障,原因多样,运行时应根据具体情况进行分析。

1.线路故障跳闸的现象

(1)警铃响、喇叭短叫,跳闸断路器位置指示灯短时出现绿灯闪光,红灯熄灭后,最后恢复正常状态,对应电流表和有功功率、无功功率表摆动,继而恢复正常。

(2)保护盘故障线路保护及重合闸动作信号灯亮或继电器动作掉牌,并指示故障性质及故障相别的动作情况,微机保护则打印出详细的报告。

(3)现场检查断路器位置三相均在合闸位置。电,这样才能使事故的范围不至扩大,不至于因为严重的事故而损。

2.线路跳闸的处理

(1)复归音响,记录故障时间,检查光字信号、表计指示和保护动作情况,确认后复归信号。

(2)检查断路器实际位置及动作断路器电流互感器外侧的一次设备有无短路、接地等故障,检查跳闸断路器油色是否变黑,有无喷油现象等。

(3)现场检查断路器位置三相均在合闸位置。

三、断路器异常及故障处理

断路器是电力系统操作控制的主要设备,其控制回路与直流、备的控制、保护、监视等功能。

1.断路器辅助触点转换异常现象

断路器辅助触点转换异常现象主要有:

(1)合闸操作时,绿灯闪光,红灯不亮或红、绿灯指示均熄灭。

(2)分闸操作时,红灯闪光,绿灯不亮或红、绿指示灯均熄灭。与断路器相连的隔离开关辅助触点转换异常现象为警铃响,主控盘可能发出“电压回路断线”、“电压回路同时切换”或“电压互感器并列”光字牌。

2.断路器辅助触点转换异常处理

断路器辅助触点转换异常时,应及时汇报调度,将对应断路器停运,然后打开断路器机构箱,检查连杆是否脱钩、转轴是否卡涩、触点的压接弹簧等是否正常及辅助触点转换是否正常等,可用螺丝刀进行调整,若无法处理,通知检修处理。与断路器相连的隔离开关辅助触点转换异常时,根据规程要求,若出现“交流电压回路断线”现象,则应首先汇报调度停用相关保护,然后再进行处理。及时检查相应重动继电器的失、励磁状态,如果确认是隔离开关辅助触点转换异常时,可以将隔离开关机构箱或转换触点盒打开,用螺丝刀进行调整,若无法处理,应通知检修处理。

3.断路器偷跳的异常现象处理

断路器“偷跳”的异常现象发生时,应首先尝试着合上断路器,恢复电网的正常运行;如果是发生三相跳闸,则必须投入相关的同期装置以实现同期合闸。此外还需区别引起断路器偷跳故障的原保护、自动装置、断路器操动、中央信号等相互联系,实现对一次设因,快速地处理断路器偷跳的异常现象。

4.断路器异常处理注意事项

(1)運行人员在实际的工作中是非常难判断由各种相关因素导致的断路器“偷跳”事故的,为确保以后不再发生相关的事故,可先准确地记录下出现的现象,事后再对数据进行分析,且在记录中必须严格地分辨一次系统的故障与二次故障的区别。

(2)断路器在发生“偷跳”现象后是绝对不允许再对其进行合闸操作的。必须检查断路器的操作机构、保护装置、二次回路的缺陷,对于不能检查只能观察的情况,需记录信号和现象,以免查找过程中再次导致断路器误跳,并汇报调度,保持断路器运行。

(3)若断路器“偷跳”,无法判明故障原因,运行人员按调度要求做好断路器停电处理措施,由上级部门处理。

四、结束语

综上所述,变电设备作为电力系统中的部件,其安全性和稳定性对电力系统的可靠运行具有重要影响。保证变电设备的正常工作,合理、正确地处理变电设备的事故及异常情况,有助于保障电力系统的安全供电,为构建以特高压为骨干网络的智能电网奠定坚实的基础。

参考文献:

[1]廖自强,余正海.变电运行事故分析及处理[M].北京:中国电力出版社,2004.

异常处理模型 篇3

关键词:Web服务,异常处理,多Agent,模型

0 引 言

Web服务作为一种分布式计算的方法, 已经渗透到人们生活的各个方面。但是人们大多关注的是Web所提供的服务功能, 对Web提供服务过程中出现的异常关注甚少。Web服务本身也存在很多问题, 例如:当一个服务不能处理输入的数据或不能正确返回数据时, Web服务就会发生异常。在一些特殊的情况下 (如网上银行服务) , 这些异常如不予以及时解决, 将会给用户带来惨重的损失。如何及时有效地处理Web服务中的异常并为客户端提供友好的异常信息, 增强与客户端异常处理的交互能力就变得尤为重要。本文在分析了Web服务中存在的各种异常的基础上, 结合Agent的特性, 提出了一种基于多Agent的Web服务异常处理模型。

1 Agent的相关定义

Agent一词直译为“代理”, 也有人把它翻译为“智能代理”。从Agent的定义可以知道, Agent首先是智能的, 它应对环境有响应性、自主性和主动性;同时, Agent还具有推理、学习、自适应能力和可移动性的特性。所谓的推理、学习、自适应能力就是指:Agent具有的三个主要部件, 内部知识库、学习或自适应能力以及基于知识库内容的推理能力[1]。

由于Agent具有了上述的功能优势, 我们将它引入到Web服务的异常处理中, 它将会在一定程度上解决传统Web服务异常处理中存在的效率低、抛出的异常消息难于理解、易于暴露Web服务内部的信息等问题。使Web服务异常的捕获、处理更及时有效, 并能够为用户提供友好的异常提示信息。

2 Web服务异常问题分析

2.1 异常的定义

异常是程序执行中遇到的错误条件或者不可预测的行为。异常的产生是由多种因素引起的, 例如:程序中代码的错误、操作系统资源不可用、运行时不可预测的状态等等[2]。在这种情况下, 我们就需要一种有效的异常处理方法, 同时还要及时通知到异常的调用者。

2.2 Web中的异常分析

目前引起Web异常的原因有很多, 这种异常可能是由于程序缺陷或者缺少访问资源。典型的问题如下:用户输入错误;磁盘空间已满或者溢出可用内存;设备错误;网络错误, 应用服务器试图使用Java数据库连接性 (JDC) 连接到远程数据库;访问数据库不存在或用户权限不够等等。

在基于Web服务的分布式架构里面, 异常处理必须满足额外需求。如异常必须提供给使用者, 那样它们就可以随时被解释;异常能够恢复;在传送某种异常时, 还要关注企业安全, 如果异常处理不严格, 提供者的Web服务就有可能把内部企业资产的详细信息透露给使用者, 或者在堆栈跟踪中泄漏敏感的企业信息[3]。

3 基于多Agent的异常处理模型

3.1 异常处理模型的架构

本文提出的Web异常处理模型是在传统的B/S结构中, 增加了一层Agent代理和一个异常信息数据库, 如图1所示, 多Agent系统可以对客户端发送的SOAP消息进行验证, 只有满足Web服务参数要求的消息才转发到Web服务器上, 否则直接在代理服务器上就向客户端发送异常消息[4]。通过这种方式就可以有效地避免客户端异常。另外, 多Agent系统还负责监测Web服务的操作和环境, 并捕获Web服务运行时发生的异常, 对异常进行匹配处理, 如果在多Agent系统的知识库中找不到匹配的异常, 那么就要到异常信息数据库中查找。获取异常处理方法后, 执行异常处理, 同时还要将处理结果信息以友好的方式发送到客户端, 为用户提供交互式操作。异常信息数据库不仅负责各种Web异常信息的存储, 同时还肩负着执行服务中日志的存储, 以备异常恢复时使用。

多Agent系统的具体组成如图2所示, Web中异常的检测和捕获处理主要由各Agent协作分工完成。异常处理交由异常管理Agent集中控制, 异常管理Agent在异常检测Agent、异常求解Agent、状态恢复Agent的协助下提供比较完善的可预测异常处理机制, 并为处理不可预测异常提供了良好的支持。

各代理Agent的具体功能如下:

(1) 异常管理Agent 它主要负责管理控制异常检测Agent、异常求解Agent、状态恢复Agent在异常处理过程中的协调通信工作, 可以视为是多Agent系统与外界的接口, 它负责获取相关信息, 并将异常处理结果传递给客户, 提供友好的互操作信息。

(2) 异常检测Agent 监听Web服务器端异常事件, 将异常信息传递给异常求解Agent。异常信息一般包括:异常的来源和类型、活动的状态信息、用户定义的一些异常参数等。

(3) 异常求解Agent 它包括三个功能部分:异常分析、异常匹配和异常知识库。异常分析主要是在异常发生后, 需要对异常进行分析和定位, 根据异常的各种信息, 分析异常发生的原因, 提取异常的相关参数;异常的匹配就是根据异常分析的结果在异常知识库中找到对应异常及其相匹配的处理方法, 并执行异常处理;异常知识库:首先对异常进行分类, 设定异常分类的目录树, 并定义各异常的特征, 建立异常知识库。在异常知识库中, 异常目录树采用二叉树的形式, 对应的异常处理方法就可以采用哈夫曼编码, 这样在异常匹配的过程中就可以加快搜索匹配的效率。在处理过程中, 如果出现知识库中没有记录的新异常, 那么异常求解Agent就要到异常信息数据库中检索, 并更新本代理的知识库, 以适应新的情况。

(4) 状态恢复Agent 当发生不可预测的异常, 而我们对它又无法处理的时候, 我们可以通过状态恢复Agent执行撤销操作, 并根据相应的日志信息使受到异常影响的作用域重返异常发生之前的一致性状态。

3.2 异常处理策略及处理流程

异常处理策略是能够解决某一类异常情况的异常处理方法。从现有的研究看, 异常处理的策略一般包括忽略、重试、替代、回滚等, 它们被用来处理不同的异常情况[5]:

(1) 忽略 若一个活动在执行过程中出现异常, 该活动已经执行所产生的行为和没有执行的部分都不影响其他活动的执行, 则可以采用忽略策略;

(2) 重试 若某次异常只是偶然发生, 再次执行本操作时, 这种异常不会再发生, 则可采取重试策略;

(3) 替代 若异常使得活动不能继续, 但存在另外一个可选的活动或另外一条执行路径, 使得执行过程可以继续, 则可采用替代策略;

(4) 回滚 当执行到一个活动实例出现异常时, 可通过回滚操作来恢复本次操作的数据。

一个Web异常处理通常由一个或多个异常处理策略、异常的触发条件以及程序控制的获得和返还操作等组成。根据以上分析和所建模型的基础上, 对Web中的异常处理的具体流程如下:

首先对于客户端异常, 由于Web服务是基于SOAP消息的服务请求, SOAP支持Agent转发, 所以可以先将SOAP的消息发送到Agent系统服务器上, 在代理服务器上首先对SOAP消息进行验证。如果满足Web服务的参数要求, 就直接转发到Web服务, 否则直接在代理服务器上就向客户端发送异常消息, 为客户进一步操作提供依据。

在服务器端, 异常检测Agent监测Web服务的操作和环境, 一旦发现异常, 异常检测Agent就要捕捉程序执行的错误和各种内部和外部的错误信息并将其记录下来存到相应的错误信息表中。接着异常求解Agent中的异常分析模块从错误信息表中提取该次异常的来源、类型和活动的状态信息等各种异常参数。异常分析模块在获取了异常的各种参数后, 将其传递给异常匹配模块。异常匹配模块根据“探测搜索”的方式在异常知识库中找到所有特征都满足当前状态的异常。使异常得到归类后, 异常匹配模块就会根据该异常在异常知识库中的编码, 找到相应的异常处理策略。并按该策略对异常进行处理。例如, 客户所要访问的当前数据库过载, 而无法及时响应, 那么这个时候就可以采用重试的策略, 在给定的时间片内重新请求。如果是所要访问的数据库不存在, 那么这个时候我们可以采取替代策略, 找到与该数据库功能等价的数据库, 然后返回消息给客户, 并为客户创建一个可交互的界面, 由客户决定是否真正执行该替代任务。如果数据库是在客户访问的过程中发生了崩溃, 导致任务无法继续进行下去, 那么这个时候我们可以采取回滚策略。

如果在异常知识库中没有找到匹配的异常类型, 那么我们就要到异常信息数据库中再次查找, 因为Agent中的异常知识库的内容只是异常信息数据库的子集, 但是异常知识库中的异常都是发生概率较大的异常, 采用这种措施, 可以提高异常匹配的命中率。如果在异常信息数据库中找到匹配的异常, 则执行相应的异常处理方法。并将该异常记录更新到Agent中的异常知识库, 以备下次使用。如果仍然没有匹配的异常, 那么这个时候将采取回滚策略, 由状态恢复Agent读取发生异常前的日志信息, 并根据相应的日志信息使受到异常影响的作用域重返异常发生之前的一致性状态。从而达到异常恢复的目的。

为了能够为客户提供友好的异常提示信息, 我们设计了如表1的异常信息数据表。

当我们在调用远程Web服务时, 如果Web服务出现异常, 根据发生异常的类型, 到数据库中查询对应的异常提示消息发送给用户。如执行程序如下:

通过上述异常处理流程的分析可以看到, 这种基于多Agent异常处理模型不仅可以使客户端提高访问Web服务的速度, 减轻了Web服务器的压力。同时可为用户提供友好的异常提示信息, 这种对异常的再次“加工”, 不仅让用户容易接受, 更重要的是保证了Web服务器信息的安全性。

4 实例研究及匹配算法

4.1 实例研究

为了获取错误信息的来源, 我们创建了Application_Error应用程序, Application_Error主要用于获取服务器运行时的错误信息, 并通过调用Components方法, 将错误信息写入日志。在Components方法中, 我们定义了Error类, Error类通过定义错误信息的类型并在Log ( ) 方法判断该类异常是否在日志中存在, 如果不存在就调用EventLog.CreateEventSource ( ) 方法将其写入日志, 同时输出相应的错误提示消息。具体执行程序如下:

4.2 异常匹配算法

为了提高异常匹配的效率, 我们采取“异常探测”的匹配策略:当异常发生时, 对异常分类树进行自顶向下的启发式搜索, 找到所有特征都满足当前状态的异常[6]。对应算法如下:

/*获得的异常属性集:A (a1, a2, …, an) , 其中必备的几个要素a1 (事件类型) 、a2 (异常原因) 。其它的属性均为O3.a3 (对象.属性格式) 。异常实例集:P (P1, P2, …, Pn) , 候选的异常实例集CP[] (cp1, cp2, …, cpn) , K为返回的最大记录个数*/

通过上述算法, 我们可以较快地对捕获异常进行匹配。获得匹配的异常实例集后, 就可以到异常知识库中查找对应的异常处理策略, 并进行有效的处理。

5 总 结

本文在分析了Web服务中异常处理存在的各种问题的基础上, 提出了一种基于多Agent系统的异常处理模型。该模型在Web异常处理中所体现的优势主要有:

(1) 将Web中的异常处理和代理Agent的智能性、协作性、可移动性结合在一起, 使异常可以得到及时的捕获和处理, 同时利用Agent推理和自学习的特性, 使得Agent的异常知识库得到不断更新, 以更加适应异常处理的需要, 并为以后的异常处理提供依据。 (2) 为用户提供友好的异常提示信息, 多Agent系统对异常的再次“加工”, 不仅让用户容易接受, 更重要的是保证了Web服务器信息的安全性。 (3) 该模型所具有的错误日志的获取和存储不仅为异常的分析提供了必要的信息, 同时当异常无法合理解决时, 也为异常的恢复工作提供了有力的保证。最大限度地消除了异常产生的影响。

参考文献

[1]张云勇, 刘锦德.移动Agent技术[M].北京:清华大学出版社, 2003:13-20.

[2]Goodenough J.Exception Handling:Issues and a Proposed Notation[C]//Communications of the ACM, 1975, 18:683-696.

[3]Liu Wenyin, Weijia Jia, Pui On Au.Add Exception Notification Mecha-nism to Web Services.IEEE Computer Society 0-7695-1512-6/02.2002.

[4]周虎, 姜淑娟.基于SOAP的Web服务中的异常处理方法[J].计算机工程与设计, 2007, 28 (15) :70-72.

[5]Sridhar Ravuthula.Web Services Exception Handling Framework forEAI Applications.2004.techdoc/2005011404.html.

论异常与异常处理机制 篇4

异常是指意外事件或小概率事件。所谓异常处理, 指的是对错误或者程序执行期发生的其他不正常事件的处理。异常处理包括对异常情况的定义及对异常处理的处理两部分。典型的异常包括:运行期错误, 如对数组的越界访问或者除零错误;对于解释性语言“异常”还可能包括静态错误, 如语法或类型定义错误;当然异常还包括各种不常出现的事件, 如输入错误和超时等。

2 常见异常定义方法

2.1 C语言

在没有提供异常处理机制的语言中, 必须使语言在异常出现之前就发现有异常, 就相当于是提前预测了错误的发生, 然后进行避免。下面给出一个C语言的简单例子:

在上面的例子中, 因为没有异常处理机制, 所以在计算之前先进行判断以预防错误的发生。当然也可以自己封装异常处理库, 主要通过setjmp和longjmp两个函数来模拟实现。setjmp函数可以实现非局部标号, 而longjmp实现程序内部的任意跳转 (与之类似的经常使用的goto只能实现函数内部的跳转) 。对于这两个函数的具体细节这里不做过多说明, 都是错误出现之后模拟跳转, 然后输出通知错误的信息。

2.2 Java语言

Java语言的异常定义

Java的异常处理机制已经十分完善, 可以直接抛出一些异常处理类, 比如:

NullPointerException:空指针异常

SQLException:数据库处理异常

IOException:输入输出处理异常

ArrayIndexOutOfBoundsException:数组

下标越界异常

也可以继承Exception类自己定义异常处理类, 比如:

在上例中就是通过继承了最基本的Exception类然后加以填充。

3 异常处理程序结构模式与控制转移模式

Java语言

Java把异常当作对象来处理, 并定义一个基类java.lang.Throwable作为所有异常的超类。在Java API中已经定义了许多异常类, 这些异常类分为两大类, 错误Error和异常Exception。Java异常体系结构呈树状, 其层次结构图如图-2所示:

Error是程序无法处理的错误, 比如OutOfMemoryError、ThreadDeath等。这些异常发生时, Java虚拟机 (JVM) 一般会选择线程终止。而Exception是程序本身可以处理的异常, 这种异常分两大类运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。运行时异常都是RuntimeException类及其子类异常, 如NullPointerException、IndexOutOfBoundsException等, 这些异常是不检查异常, 程序中可以选择捕获处理, 也可以不处理。这些异常一般是由程序逻辑错误引起的, 程序应该从逻辑角度尽可能避免这类异常的发生。

而非运行时异常是RuntimeException以外的异常, 类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常, 如果不处理, 程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常, 一般情况下不自定义检查异常。

Java中异常处理则是通过5个关键字try, catch, throw, throws, finally来管理。基本进程是监视执行try模块的内容, 在try模块检测到的异常会被抛出, 在catch中异常会被抓到并作相应处理。还有一部分系统生成的Java执行时自动抛出, 可以通过throws关键字在方法上声明该方法要抛出异常, 然后在内部通过throw抛出异常对象。finnally关键字会在方法执行return之前执行。典型结构如下:

Java建立异常的模式和C++是一模一样的, 也是通过在try模块执行相应的语句, 建立要抛出的异常对象, 然后对其进行实例化, 抛出异常就可以了。

上面结构中Trouble和Big_Trouble都是继承了Exception的类, 是之前自行定义好的。所以可以直接调用显示错误信息。有上面可以看到, 其实各语言处理异常的大致结构都是一样的。只是涉及到具体的语法, 以及可以使用的已有方法的便利程度还有语言的完善性会有差别。Java做为现在开发最经常使用的语言, 在异常处理上已经做得很好了。

4 异常规范说明及典型示例

异常规范指的是函数说明部分的附加异常列表, 以确保该函数只抛出表中列出的异常。

举个例子说明Java的异常处理机制和控制方式:

这个程序的输出结果如下:

下面来分析一下这个程序:

先说明一下printStackTrace函数的作用是:在命令行打印异常信息在程序中出错的位置及原因。它是Exception类中定义好的方法。这个程序在主函数里是执行了testEx () , 然后一步一步走相当于是依次执行了testEx1 () 与testEx2 () 。但是值得注意的是testEx1 () 和testEx2 () 都没有执行完成, 因为在testEx2 () 中执行循环语句的时候会因为被除数i=0而导致出错, 于是抛出错误, 所以testEx2 () 的catch能够抓住错误, 并输出testEx2, catch exception.然后执行最后的finally模块中的语句, 输出textEx2, finally;return value=false.然而在返回继续执行testEx1 () 的时候由于textEx2 () 出错, 所以不会继续执行, 直接执行finally中的语句, 所以输出textEx1, finally;return value=false.同理在返回testEx () 执行的时候也是直接执行finally中的语句, 所以输出是上面的结果。

这个程序很好的展现了在Java中出现异常之后控制是如何转移的, 同时了解了关于异常基本的定义方法与抛出异常的方法。

异常处理是一个十分重要的过程, 它可以很好的避免一些悲剧事情的发生。也能够提供程序更好的安全性。我们应该在编写代码的时候注意细节。尽量避免错误的发生, 同时用异常处理机制进行保障。

参考文献

[1]Kenneth C.Louden.Programming Languages----Principles and Practice, second Edition.电子工业出版社。 (2004.4)

[2]郑莉.《Java语言程序设计 (第2版) 》.清华大学出版社 (。2011.1)

[3]李钟蔚.《Java从入门到精通 (第2版) 》.清华大学出版社 (。2010.7)

基于数据挖掘的流量异常分析模型 篇5

关键词:入侵检测,网络流量,CLOSET算法

随着信息技术的不断发展,计算机网络已逐渐渗透到了国民经济的各个行业,计算机网络系统的安全已经成为经济社会发展不可忽视的一个方面。在众多的网络安全技术中,入侵检测技术由于其具有高度的智能性、自适应性和实时性等特点已成为目前网络安全发展的一个重点。

在对大量网络入侵检测技术进行研究的基础上,建立了一个基于流量的智能化入侵检测模型[1]。

1 流量智能化入侵检测模型的总体结构

该模型主要由两大模块组成:流量异常检测模块和流量异常分析模块,总体框架如图1所示。在流量异常检测模块中,利用异常检测技术,应用人工神经网络算法对网络数据包流量进行训练、检测,当发现异常后,启动异常分析模块,对出现流量异常的网络采用数据挖掘算法,挖掘出频繁序列,建立精简高效的序列规则,实现入侵检测模型的智能化。

2 基于数据挖掘的流量异常分析模型

对该模型的第二部分流量异常分析模块进行了重点研究,建立了一个基于数据挖掘的流量异常分析模型[2]。该模块共包括异常数据收集和频繁模式挖掘两个部分。

2.1 异常数据收集模块

作为流量异常分析的第一步,需要收集一定格式的审计数据,使用libnids(Network Intrusion Detect System library)来完成这一工作。Libnids,网络入侵监测系统函数库,它是由两种C函数接口库libnet和libpcap的基础上开发的,封装了开发NIDS所需的许多通用型函数。libnids提供的接口函数监视流经本地的所有网络通信,检查数据包等。最终数据挖掘程序使用的审计数据是一种级别较高的事件集。属性值被用来构造流量异常检测模型。

2.2 频繁模式挖掘模块

频繁模式挖掘采用的算法是CLOSET算法。系统定期收集各端口的流量信息,定期计算频繁模式。为了适应流量处理的特点,在获得的频繁模式中加入了时间标记,记录频繁模式生成的时间,通过频繁模式的时间标记来反映频繁模式的存在期限和优先程度。由于频繁模式相对固定,因此相同的频繁模式只存储一次,系统记录频繁模式出现的最后时间和出现的次数,近期出现次数较多的频繁模式优先选择[3]。

3 基于频繁模式挖掘的流量异常分析模块的实现

3.1 流量收集及预处理模块

流量收集及预处理模块的主要功能是收集发生异常的流量数据,根据端口进行流量统计,记录端口流量在前N位(本文选择前10位)的端口及流量等相关信息,将提取的信息存入数据库中。

a.流量收集。流量收集部分的数据来自数据库,当接到流量异常的通知后,在一定的时间内,记录发生异常的所有子网端口的数据信息:源地址,目的地址,源端口,目的端口,状态,端口号,流量值以及时间,把它们写入数据库中,并标记为异常数据文件。

b.概要信息提取。因为异常检测系统所关心的问题就是找到这种流量剧烈变化的情况。设时间T1,T2(T2>T1),某端口C。

一种情况是,T1时刻端口C流量排名没有在前N位,而在T2时刻端口C的流量排名出现在前N位,则很可能是出现了异常情况。

另一种情况是,T1时刻端口C流量排名在前N位,而在T2时刻端口C的流量排名提高很多,则很可能是出现了异常情况。

因此提取某时刻流量排名前N位的端口及其流量,挖掘这些端口及其流量的频繁模式来检测流量异常情况。

c.离散化方法。为减少连续属性值个数,我们对流量数据进行离散化处理。现采取自然划分分段的方法对流量数据进行划分。

3.2 网络流量频繁模式挖掘算法的实现

3.2.1 flist的创建方法。

将flist设计为数组类型,每个数据项的数据类型为:

type fist_node as

{port;//端口值

stream;//流量离散值

support;//支持数

point;//指向树节点的指针}

3.2.2 FP-tree的建立

FP-tree节点类型:

Type tree_node

{port;//端口号

stream;//离散值

support;//支持数

point-next;//树下一节点指针

point-pre;//连接父节点指针

point-same;//相同值节点指针

}

3.2.3 CLOSET算法的实现

输入:概要数据库,最小支持度阈值min_support;输出:频繁闭模式集合FCI;

方法:

BEGIN

a.建立flist:

扫描概要数据库,提取信息加入TDB;计算item(port,stream)相同的项目数量;将频繁项列表flist置为空;

对数据库中每个transaction{

if(item.support>=min_support)

将item加入频繁项列表flist;

}

b.将频繁项列表flist按照支持数降序排列:

Descend_flist_item(flist):

c.根据flist将TDB事务数据库中获得事务中的频繁项列表,并排序:transaction_item_descend();

d.FCI=φ;//初始化频繁闭项集FCI

e.使用CLOSET算法,获得频繁闭项集FCI:

CLOSETφ;

END

4 结论

介绍了如何利用CLOSET算法来进行异常流量的频繁模式挖掘,实验结果表明该算法能够有效地发现多种网络入侵行为。和现有基于知识工程的方法相比,该方法具有更高的智能性和环境适应性。

参考文献

[1]何明耕,戴冠中.智能入侵检测技术发展概貌[J].计算机工程与应用,2001(15):1-4.

[2]连一峰,戴英侠,王航.基于模式挖掘的用户行为异常检测[J].计算机学报,2002,25(3):35-50.

[3]覃爱明,胡昌振,谭惠民.数据挖掘技术在网络攻击检测中的应用[J].计算机工程与应用,2002,38(11):56-89.

Java异常处理分析 篇6

随着互联网的不断发展, B/S结构的软件项目已越来越多, 而在B/S结构的软件项目开发中, Java语言通过虚拟机实现了跨平台的特点, 所以Java语言仍然是当前B/S结构的软件项目开发的主流之一。在软件开发中, 因为数据输入、内存处理及硬件因素等原因可能导致程序出现异常而中断, 这时必须要通过程序代码对异常进行处理, 保障程序执行的延续性, 而Java的虚拟机则有自己的异常处理机制, 通过Java的关键字try、catch、finally、throw及throws可以对异常进行灵活处理。本文通过实例对Java的异常处理机制进行了归纳分析。

2 Java异常处理机制

Java作为面向对象的程序设计语言, 所有的方法、属性都属于类, 异常也不例外, 所有的异常都继承于Exception类, 根据异常的类型可将异常分为执行异常和检查异常, 执行异常又称为运行异常, 在发生异常时程序员可以不做处理, 由虚拟机自动进行处理, 检查异常则必须通过代码处理, 否则程序会出现编译错误。最简单的异常处理方法是使用try、catch语句进行捕获处理, 将可能发生异常的语句用try语句括起来, 再通过catch语句对发生的异常进行处理, 当系统运行发生异常时, 该异常对象从第一个catch语句一开始, 依次与每一个catch后面的异常类进行比较, 如果相符, 则执行该该catch语句后面括号内的语句, 转而跳出try、catch语句。例:

import java.util.Input Mismatch Exception;

import java.util.Scanner;

public class Demo1 {

public static void main (String[] args) { int a, b;

Scanner sc=new Scanner (System.in) ;

try {

a=sc.next Int () ;

b=sc.next Int () ;

System.out.println ("a/b="+a/b) ;}

catch (Input Mismatch Exception e) {

System.out.println ("数据输入格式发生异常") ;}

catch (Exception e) {

System.out.println ("数据运算发生异常") ;}

}

}

当程序运行时若输入4.5回车, 则出现数据输入格式异常, 异常被第一个catch语句捕获, 输出“数据输入格式发生异常”。当程序运行时输入3回车0回车, 则出现分母为零的运行异常, 异常被第二个catch语句捕获, 输出“数据运算发生异常”。

3 异常处理关键字

除了基本的try、catch语句进行异常处理外, 还可以通过关键字throw和throws主动抛出异常或声明该方法将产生异常。

3.1 throw关键字

throw关键字通常用在方法体中, throw本身作为一条语句, 作用是主动抛出一个异常对象, 该异常可以通过自己写的catch语句进行捕获处理, 也可以在上一级代码调用时由调用者进行处理, 例:

public static int fac (int n)

{ int f=1;

if (n<0) {

throw new Exception (“负数不能求阶乘!”) ;}

for (int i=1;i<=n;i++)

f*=n;

return f;}

3.2 throws关键字

Throws关键字一般放到方法头的后面, 用来声明该方法会产生异常, 该方法通过throws抛出若干异常, 而方法本身不处理异常, 将异常上抛给调用者, 由调用者处理异常或继续向外抛出异常。例:

Public static float f1 (float a, float b) throws Exception

{ return a/b;}

4 总结

异常处理机制是体现软件工程思想的特点之一, 通过异常处理机制可使程序增强易读性、可维护性。因此作为Java程序开发人员, 应熟练掌握异常处理方法。

摘要:Java语言通过虚拟机实现了跨平台的特点, 从而间接促进了Java语言在当前软件项目开发中的应用。而虚拟机本身有自己的异常处理机制, 通过灵活运用异常处理, 可以提高程序的易读性及可维护性, 本文对Java的异常处理机制进行了归纳分析。

关键词:异常,Java,处理,分析

参考文献

[1]钟诚, 汪学明, 陈旭.Java语言及其应用.重庆:重庆大学出版社, 2006, 6.

[2]孙卫琴.Java面向对象编程.北京:电子工业出版社, 2006.

异常处理模型 篇7

无线mesh网络(WMNs)是一种基于IP协议的无线宽带网络结构,它融合了WLAN和Ad Hoc各自的优势具有快速自组性、频谱效率高、可拓展性强等特点。多跳路由机制加强网络的覆盖和灵活性,同时也增加了其保证所有节点安全的难度。其无线的网络基本架构和通信节点的移动性又使得其很难通过防火墙和代理服务器等边界防护设备来控制用户和节点的接入,很轻易地受到恶意节点的攻击。所以在WMNs的应用中必须有恶意节点的入侵检测机制来保证网络的安全。

信誉机制主要通过评估节点的行为来评估节点的安全状况。随着普适计算时代的到来,信誉管理已经开始在P2P网络和Ad Hoc网络中广泛应用。而如何安全可靠地进行信誉管理是一个很具有挑战性的问题,吸引了大量研究者的关注。

本文将信誉模型引入到WMNs的入侵检测系统中,通过对节点信誉的判断来检测异常节点。由于WMNs的网络规模普遍比较大,普通的信誉模型收敛速度慢,并占用大量网络资源。本文提出了分层的信誉管理模型,在普通信誉模型的基础上,将WMNs分簇,以簇首作为管理节点,信誉在簇内发起与传递,提高了信誉收敛速度。另一方面,由于整个信誉系统依赖于簇首管理节点,为防止簇首管理节点受到攻击误报、谎报异常消息或其他不可抗拒因素造成瘫痪后,造成整个信誉系统的瘫痪。本文提出了管理节点灾备机制,当簇首管理节点发生异常后,信誉系统可以无缝运行,提高WMNs的安全稳定性。

1 模型的框架结构

一般情况下,WMNs由两部分组成,即:mesh路由器(MR)和mesh客户端(MC),如图1所示。 Mesh路由器构成了WMNs的骨干网络,它与Internet相连接向Mesh客户端和传统客户端(conventional clients)提供网络访问服务。Mesh路由器具有低移动性的特性,网络中的多数Mesh路由器的位置相对固定,WMNs骨干网络的拓扑结构相对稳定。所以在此模型中,不考虑关键节点的移动性问题。

本文中,无线mesh网络采用混合路由模型,以适应其普遍用于大规模网络覆盖的事实:一个完整的WMN分成多个簇,按照路由选择中工作职责不同,将各个节点划分为簇首(Cluster Head,CH)、网关(GateWay,GW)和簇成员(Cluster Member,CM)。簇内使用基于DRS的反应式路由选择协议,该协议能够适应簇内各用户移动快的特点;簇间使用先应式路由选择协议,适应簇间移动相对比较小的特点[1]。

在基于信任的网络体系中,可抽象出两个独立运行又相互关联的逻辑系统(如图2所示):行为系统和信誉系统。行为系统实现网络的实际功能;信誉系统作为行为系统的支撑,为其提供安全支持,同时,信誉系统通过对网络成员在行为系统中的表现,进行分析判断计算可信度,以可信度作为信任决策依据,将决策结果返回给行为系统,保证行为系统安全运行。

图2所示,本文先给出信任模型的相关定义。

定义1:直接证据是指节点通过直接观察,得到的邻居节点的行为表现情况;通过对直接证据的量化计算,得到直接信任。

定义2:间接证据节点是指通过交互,得到的由其三方节点推荐的信任情况。综合间接证据的可用程度,得到其间接信任值。

定义3:全局信任(又称信誉)是节点在簇首处享有的信任,是簇首节点合并其直接信任和间接信任所得出的,判断该节点是否为异常节点的依据。

定义4:可信集是指系统所容许的信任值的变化区间。

定义5:策略集是指当发现异常节点后,能指导行为系统作出的相应响应措施。

在信誉系统中,每个节点运行两个代理:第一个代理(监听代理)负责监听邻居节点对数据包的收发情况,使mesh节点工作在混杂模式下,这样mesh节点便可以监听到其邻居节点的行为,得到直接证据,计算并存储直接信任值。第二个代理用于进行信任值传递,接受其它节点的信誉推荐并进行推荐合并计算,最后将结果传递给管理节点。

2 信任的量化

2.1 直接信任的量化计算

工作在节点i上的监听代理,通过对邻居节点j每次行为质量的分析判断,对节点j作出good(可信)、bad(不可信)、uncertain(不确定)评价并作出相应的统计(分别记为gbu)作为直接证据。根据直接证据,将节点i对节点j的可信度分配为:

{R(G)=gg+b+uR(B)=bg+b+uR(U)=ug+b+u(1)

显然,在此R(G)+R(B)+R(U)=1。在本文的信誉模型中,将直接信誉定义为统计结果完全可信结果中去掉绝对可信不可信统计结果,即节点i对节点j作出的直接信誉评价为:

Τl(i.j)={R(G)-R(B)R(G)+R(U),R(G)R(B)0,other(2)

2.2 推荐信任与全局信任

为了防止串通欺骗,簇内各个节点都监视其所有邻居节点,簇首在监视其邻居节点的同时,将监视范围扩大到整个簇内,并保存簇内所有节点的全局信任值。

由于WMNs采用是逐跳通信的方式,簇心节点i与其非邻居节点之间的通信只能依靠其中间节点,为此引入了文献[2]中可传递信任的概念,由此产生间接证据。设Ω为簇内所有节点的集合,节点ji处所享有的推荐信任为:

Τr(i,j)=kΩΤl(i,k)Τl(k,j)(3)

式(3)中k为从ji的中间节点。

矩阵Γ表示[Tl(i,j)],向量Ci表示节点i的存放的其邻居节点的信任值

Τri=(Γ)ΤCi(4)

若节点i要计算其邻居节点的下两跳节点,则有

Τri=(ΓΤ)2Ci(5)

假设从节点j到预受点in跳,则其通过传递迭代计算,在i节点处享有的信誉值为:

Τgi=(ΓΤ)nCi(6)

每个节点设置其邻居节点的采纳阈值Taccept,即只有当节点i的邻居节点在节点i处享有的本地信任值Tl>Taccept时,才会接受其邻居节点所传送过来的其他节点的信任值。文献[3]中引入了受信节点采纳系数的方法来更新全局信任值,以防止串通欺骗。更新后的簇内各节点在簇首i处享有的全局信任值为:

Τg,ti=αΤg,t-1i+(1-α)e0α1(7)

e为受信节点本地信任值所组成的向量,α为采纳系数,α越大表示其受原推荐信任值的影响越大表示其受信任程度越大。

3 异常节点的检测与响应

本文中,异常节点的检测分为两大步骤:(1)建立完整的参考文件,作为异常节点的检测标准。(2)通过检测节点信誉变化与参考文件的偏差,判断出异常节点。

网络建立时,为每个节点分配全网内唯一的ID,初始化使其很快形成适当规模的多个簇。在每一个节点都设置检测窗口W,其检测时长为Th,每个节点在滑动窗口内监听其邻居节点的行为,在滑动窗口时间结束以后,查找路由表,确认发往簇首的路由,向其下一跳路由节点发送其观测的信息,以及其计算的信任值,逐跳传递至簇首节点后,运行在簇首节点上的代理计算各个节点的全局信任值,经过多次迭代计算得到完整的一张存有簇内各节点信誉值的列表,此列表为后续异常节点检测提供依据。

簇首管理节点的参考列表文件建立完成之后,簇首向簇内个节点广播完成信息,通知各节点更新检测窗口,各个检测节点收到信息后,发送确认信息给簇首节点,检测窗口重新开始计时。

在每一个检测窗口W内,各节点监听其邻居节点是否有事件发生,若有事件发生,则更新其所存储的本地信任值向量,并在窗口结束后,向簇首节点发送新的本地信任值,簇首节点利用更新后的数据计算出其全局信任值后,与原全局信任值进行比较,若有

|Τg,newi-Τg,oldi|θ(8)

θ为设定信誉变化门限,即可信集。若其全局信誉值变化过大,则被判断为异常节点。若检测窗口内没有事件发生,则向簇首发送空消息,声明其仍在簇内。

簇首节点发现异常节点后,向簇内各节点发送广播消息,公布异常节点ID,收到通知的各个节点根据消息更新路由表,根据策略集指导节点在应用层得工作,以保证网络安全。

4 管理节点灾备机制

为了防止处于上层地位的簇首管理节点受攻击后发送错误的信誉报告,使网络受到大规模的攻击,或受到DoS攻击无法及时报告出异常节点信息,本文提出管理节点灾备机制。

在选取簇首节点的同时,选取后备簇首节点。后备簇心节点一般在簇首确定后,除簇心外,节点信誉最高,且不为簇首邻居节点的路由节点担任。簇首管理节点完成参考配置文件建立之后,查找出信誉最高,且不与其为邻的节点,向簇内各个节点发送广播通知,宣告建立后备簇首节点,簇首管理节点收到消息后,广播发送确认信息。

簇心管理节点的邻居节点在向簇首节点传递信任值的同时,也对簇首节点进行监控,当发现簇心管理节点发生异常(谎报异常节点、错误转发路由等),则向后备簇首节点发送主管理节点异常报告。后备簇首节点上设置阈值ω,簇心节点i的邻居节点总数为N,向后备簇心节点发送管理节点异常报告的节点数为W,若W/Nω,则后备簇心节点判断主管理节点发生异常。后备管理节点在簇内发布广播消息,告知所有节点,原簇心管理节点的领节点收到广播消息后,在簇内广播能证明原簇心管理节点发生异常的证据,其他节点收到证据后,改变原信誉传递推荐策略,认定后备簇心节点为新的管理节点,并推荐簇内信誉最好,且不与管理节点为邻的节点为后备管理节点。管理节点灾备机制流程如图3所示。

5 仿真实验及结果分析

本文选OPNET为仿真平台,对所提出的模型进行仿真,验证其性能。

一个含有30个网络节点,包含12个MR和18个MC的WMN随机分布在1 000×1 000 m2的范围内,其中有6个为异常节点,其余为正常初始化节点。本文选择其中的8个节点(均为MR)为预受信节点,其信誉值为0.99,并选定其中一个为簇首。网络建立之初,其余所有MR的信誉值为0.80,所有MC的信誉值为0.50。

本文各节点通信在MAC层采用802.11b标准中的DCF协议,簇内节点网络层通信采用DRS协议,节点在应用层以6/Sec的速度产生数据包。

假设异常节点会对网络造成以下两种攻击:Atk0—节点拒绝转发数据包;Atk1—信誉欺骗,发布虚假的邻居节点信任值。检测窗口时长Th=20 s,配置文件建立时长为4 000 s,检测时间为800 s,则本仿真中一共有40个检测窗口。

如图4所示,对于拒绝转发数据的恶意节点,本系统可以在14个时间窗口内迅速地检测出所有异常节点,而对于信誉欺骗的恶意节点,系统也能在26个窗口内完成检测。说明此机制对于异常节点的检测是有效的。

图5是检测机制运行之中,簇首节点在第12个时间窗时受到DoS攻击的情况下,异常节点的检测情况。仿真结果表明,在簇首节点受到攻击的情况下,系统依然能稳定运行,并检测出所有异常节点,且反应时间只比正常情况长10个时间窗。说明管理节点灾备机制效果显著。

6 结束语

本文提出了一个完整的基于信誉模型的无线网格网络中的异常节点的检测模型。详细阐述了信任值的计算、推荐及信任值合并的方法。根据WMNs网络的特点,将信誉管理进行分簇处理,解决大规模网络中信任值收敛慢的问题,并提出了管理节点灾备机制,保证信任管理模型能稳定运行。仿真结果表明,该系统能有效地鉴别出异常节点,且能保证其自身的安全稳定性。

参考文献

[1]于尧,李喆,刘军.移动自组网中一种基于信誉的安全分簇算法.东北大学学报,2009;30(9):1257—1261

[2] Kamvar S D,Schlosser M T,Molina H G.The EigenTrust algorithmfor reputation management in P2P Networks.In:proceedings of the 12th international conference on World Wide Web,Budapest,Hun-gary,May 2003

浅析Java异常处理机制 篇8

1 什么是Java异常和异常处理

异常是指程序运行过程中出现的中断正常的程序控制流的事件。没有异常处理代码的程序可能会非正常地结束, 引起严重问题。

异常处理是处理程序运行时出现的任何意外或异常情况的方法。异常处理使用try、catch和finally关键字来尝试可能未成功的操。异常处理分离了接收和处理错误代码, 这个功能理清了编程者的思绪, 也帮助代码增强了可读性, 方便了维护者的阅读和理解。

异常处理通常是防止未知错误产生所采取的处理措施。异常处理的好处是你不用再绞尽脑汁去考虑各种错误, 这为处理某一类错误提供了一个很有效的方法, 使编程效率大大提高。

2 必检异常和免检异常的区别

在整个的Java异常处理类的层次中如图1所示, 可以分为两大类异常:必检异常和免检异常。免检异常又称运行时异常, 它们是RuntimeException、Error以及它们的子类, 意思是指编译器不检查处理它们, 程序员可以不处理它们, 当出现这样的异常时, 总是由虚拟机接管。出现运行时异常后, 系统会把异常一直往上层抛, 一直遇到处理代码, 如果该异常没有被处理, 程序将终止。必检异常又称非运行时异常, 意思是指编译器会强制程序员检查并处理它们。

大多数情况下, 免检异常反映程序设计中不可重获的逻辑错误, 这些都是程序中必须纠正的逻辑错误。免检异常可能在程序任何地方出现。

3 异常的处理方法

Java语言为程序员提供了处理异常的方法。利用这种称为异常处理的方法, 能够开发出健壮的程序。表1中有两个例子, 例1中没有对可能的异常进行处理, 如果输入的不是整数, 程序将会非正常终止。例2中采用Java语言提供的try…catch…语句对可能出现的问题进行捕获处理, 当类错误发生时, catch语句块捕获它并且可以进行某些特定的操作, 包括是否终止程序。可以使用trycatch结构块处理这个错误, 它可以使程序捕获错误并继续执行。使得程序的相应更加优雅。

4 异常处理模型

Java的异常处理模型基于三种操作:声明异常、抛出异常、捕获异常。如图2所示。

5 结束语

异常处理机制使得程序无需在很多可能出错的地方增加冗长乏味的判断语句, 能够集中地处理程序错误或者异常情况, 提供了一种机制使得程序可以尝试从异常情况中恢复, 而不是完全崩溃。所以程序开发者应该合理的使用异常处理开发功能健壮的程序。

参考文献

[1]埃克尔.Java编程思想[M].陈昊鹏, 译.北京:机械工业出版社, 2007.

[2]昊斯特曼.Java核心技术[M].叶乃文, 邝劲筠, 杜永萍, 译.北京:机械工业出版社, 2008.

上一篇:解读食品添加剂下一篇:国有资产管理模式分析