1 状态的哲学思考
状态在”在线汉语词典”中的解释是物质系统所处的状况,对不同的物质运动形式,可用不同的一组物理量来描述相应物质系统的状态。如质点作机械运动时,可用质点的位置、动量等来描述其机械运动状态;由一定质量理想气体组成的系统,可用温度、压强、体积等来描述其热学状态。状态也指物质的各种聚集态,如固态、液态、气态等。
状态论是继系统论、信息论、控制论之后的一个研究状态的理论。对于复杂性系统的研究具有很强的指导意义。
1.1 状态论的简述
状态论是专门研究事物状态产生、稳定、变化的理论,状态论以复杂系统的状态和过程作为自已的研究对象。状态论的主要任务是描述和表达事物在演化过程中的动静问题,事物在运动变化中的相对静止、亦静亦动、稳定存在的非线性的状态问题,揭示事物演化过程中系统、状态和过程之间的复杂关系以信状态之间的各种确定与非确定的、连续与非连线性的关系问题和状态的历时态集合如何组成复杂性过程的问题等。
日常用语中的状态有以下三个含议:(1)状态是针对某一个具体存在者,是对具体存在者的当前情况和发展态势的描述和命名;(2)状态是与时间维度相联系的,状态是指某一特定时刻和时间期间的情况和态势,但在日常中我们描述时往往不刻意强调;(3)状态可以描述动态的对象,也可以描述相对静止的对象。而状态论中的状态是指在特定时刻或时间区间中的事物相对静止或稳定存在的总合。
状态适用的对象有两种,(1)共时态对象,即事物停时的存在,指对象不发生变化时的静止存在;(2)历时态对象,是指对象在一个有限时间期间的稳定存在的总合。历时态的状态是亦静亦动的对象,是事物整体、质的相对静止和事物局部、量的运动变化的统一体。
1.1.1 状态概念的简单说明
状态概念的简单说明(1)日常用语的“状态”是表示事物的存在方式和情况;(2)状态在具体科学和技术中外延狭窄一般是指一组变量的集合;(3)部分哲学家监于状态的普适性试图将它上升为一个哲学范畴;(4)状态论中的状态概念是一个涉及面比较广泛的对象;(5)以状态范畴为核心和边辑出发点的状态论是研究复杂系统的一般理论;(6)状态论是描述复杂系统演化过程中的动静关系的理论,状态论不侧重对象的局整关系,别然动静关系中必然有局整问题,局整关系中心然有动静问题。状态论与系统论的主要区别在于状态论从状态研究事物的演化,系统论则从系统出发研究事物的演化。(7)状态论是探讨复杂系统研究的出发点、路径、原理和方法的理论。状态论以事物或系统的状态及状态组成的过程作为研究对象,涉及四个基本对象,即非系统、系统、状态、过程和两大历时态层次即状态层次和由状态组成的过程层次。
1.1.2 状态的符号表示
状态可以用符号(s,t)来表示,s表示系统或任一对象,t表示时间。状态可以看作是系统和时间的二元映射。状态的集合,我们叫过程,p={(s,t1),(s,t2)…(s,tn)}。
1.1.3 状态论中状态的要点
状态论是对科学技术和哲学层次的状态概念的继承与改造。其要点有(1)把状态与过程相联系将状态置于过程之中。(2)把状态与系统的有限演化联系在一起,系统被包容在状态之中;(3)对状态概念进行时间维度的精确限制。(4)以状态概念为基础提交出了由非系统、系统、状态、过程四个历时态层次的理论。(5)状态论的状态范畴提交出了过程的非连续性和过程最小单位位的命题。(6)状态论的状态范畴揭示了状态的七个方面的性质,即(1)状态的相对静止性与变静变动的稳定性、(2)状态的相玴性、时空统一性、量质统一性、整体性、非线性;(3)过程层次中的最小单位位性、功能上的相对独立性;(4)状态之间的非连续性、状态之间关系的复杂性。(5)状态对于过程的从属性和对系统的包容性;(6)状态与过程界定的相对性;(7)状态范畴对系统的关键性。
1.1.4 区分事物状态的五个主要标志
区分事物状态的五个主要标志。(1)针对特定的对象、对象的特定层次或特定的维度;(2)对象必须有一个时间维度假 (3)对象的相对静止或质的规定性相对稳定不变;(3)对象在历时态中功能的相对独立性能 (5)对象的整体性的非线性;
1.1.5 状态描述的五大要素
状态的五大要素。(1)系统存在;(2)时刻或时间期间;(3)相对静止或稳定性;(4)功能上相对独立;(5)整体的非线性。状态是特定时间期间事物或系统保持其质的相对稳定不变的存在总合,是事物共时态与历时态相干统一体,是特定过程的最小的历时态层次或单位。
1.1.6 状态范畴的主要特征
状态与过程范畴不同的是状态范畴一般用来描述事物演化过程中的相对静止,即各个历时态组成片段质的稳定态、对象的相对独立性、演化过程中的历时态层次性和非连续性。状态在事物的演化过程中具有静止性或亦静亦动性、相对稳定性、非线性整体性、相对独立性和状态之间的功能间隔性特征。状态范畴是对事物的实体、要素、结构、系统、功能和局部演化过程竺存在的统一命名和统一描述。从不同侧面可以看到状态的不同性质:
(1)对多变量系统来说状态是序参量相对稳定不变,是系统的稳定态;
(2)对层次来说状态是过程中的历时态层次;
(3)对分析方法来说状态是不可以再分的过程的最小历时态单位;
(4)对系统来说状态是包容了系统的更大的历时态存在层次,是新的层次突;
(5)对连续和非连续来说状态是过程中的间隔,过程中的非连续,是由功能间隔离散的对象组成的过程。
(6)对量与质来说状态是量的变化质的稳定不变;
(7)对运动与静止来说是变静亦动;对系统来说是系统的有限演化是动,对过程来说是过程中的相对静止;
(8)对局部与整体是局部量变化与整体质静止的统一;
(9)对时间与空间来说是时间空间的统一,是共时态与历时态相干性统一。
(10)对有限无限来说是有限时间、有限空间相干作用的统一体;
(11)对结构来说状态是主要结构的不变化,相对稳定;
(12)对要素来说状态是主要要素性质、功能、数量的相对不变;
1.1.7 状态论与哲学范畴的关系
1.1.7.1 状态与运动和静止的关系
运动与静止是描述对象存在状况的哲学范畴。在当前的哲学理论中,普遍认为事物运动变化是绝对的、无条件的、永恒的。静止是本对的、有条件的、暂时的,静止有事物量的静止或质的静止的区别。静止仅仅是物质运动的特殊形式,是事物运动在一定阶段上质的相对稳定状态。
在状态论体系中,事物内部变化分成量的变化与质的变化。质的变化是事物作为单一、整体存在规定性的变化。量变则是事物作用多、局部存在以及局部关系存在变化。在状态论体系中,事物或系统的量变和质变分三种情况:(1)量的静止不变,质的静止不变.(2)量的运动、质的相对静止;(3)事物或系统量的运动变化,质的运动变化。
1.1.7.2 状态与局部与整体的关系
局部与整体是描述事物两只其组成要素之间关系的哲学范畴。整体是由部分构成的,没有部分则整体什么也不是,整体构成它们的关系,没有整体便没有部分。在量上看,整体在量上是一,部分在量上是多。局部与整体的关系有两类:(1)空间上共时态的局部与整体关系;(2)时间上历时态的对象之间的局整关系。局部与整体关系包括四种情况,(1)非系统要素与非系统总体; (2)系统要素与系统
整体;(3)系统与状态; (4)状态与过程.
在状态论中复杂事物的历时态被分为四个层次,即非系统存在、系统存在、状态存在、过程存在。非系统包含于系统中,系统包含于状态中,状态包含于过程中。非系统是系统的局部,系统是它的整体,二者构成局整关系;系统是状态的局部,状态是局部的有限演化整体,两者构成局整关系;状态是过程的局部,过程是太态的整体,二者构成局整关系。
1.1.7.3 状态与结构功能的关系
所谓结构是指对象内各个要素相对稳定的相互联系、相互作用的方式、组织形式、结合方式和秩序。系统结构的形成在于要素间的相互联系、相互作,实质就是物质、能量、信息的交换和转换。系统结构分三种(1)空间结构,即要素在空间上的排列秩序;(2)时间结构,指系统按时间进程呈现出来的有秩序的流动性,变动的结构;(3)时空统一的结构,是时间结构和空间结构的统一。功能是系统整体在其内部和外部随着系中表现出来的作用和能力。功能分成外部功能和内部功能两种。外部功能指系统整体对环境的输出作用,对环境的改变作用。内部功能指系统整体与要素联系中表现出来的对要素的作用和能力。对简单系统而言,结构和功能总表现为一定的功能,一定的功能总是由一定的结构产生。
在状态论中将结构分为共时态系统结构、历时态系统结构和过程结构,三者组成事物的结构,而事物的功能是三种结构的相干作用的产物。此时的功能主要指系统、状态或过程对外表现的性质、作用,我们将其分成系统功能、状态功能和过程功能三种。这里的状态结构就是指系统在保持质的相对静止时间区间内的系统内各个要素的变化发展,以及这些要素之间的结构关系。系统保持质的相对静止,而又同时是系统内各种要素及关系的变化组成系统的状态。系统的功能一般通过状态的功能表现出来,而状态的功能中包含着系统的有限演化存在的功能。系统状态的更替变化就组成过程。过程的功能中又包含着一个个状态的功能。在简单系统和简单过程中,特别是时间历程中的静止对象,其系统、状态、过程三个层次的结构和功能可以是等价的,因为在时间历程中它们都没有发生结构和功能的变化,它们的区别只在于三者经历时间尺度不一样。
1.1.7.4 状态与时间、空间关系
时间和空间概念与人类关于整个世界的认识密切相关。一般人们可以将时间理解为物质运动的延续性。时间概念反映是特质事件的先后顺序,不周过程之间的间隔、阶段以及过程的延续。时间描述的是一种对象的前后相继的历存性。空间则指运动的物质的广延性。空间概念反映的是诸多事物现象的邻接性和秩序性,表示它们的相互位置、距离和广延。空间描述的是一种对象的并存性。时间的特点是一维性,具有方向性和不可逆。空间的特点是三级性,各个方向没有区别。
状态论认为时间就是指存在才的变化。时间是存在者的规定性之一,时间与过程、历史、变化等所描述的是大致相同的对象。对存在者变化的描述、量度、抽象和命名,时间所指向和描述的对象是存在着变化的。在时间量度上人们是用自然科学时间的变化为参考系对人们面对的对时进行量度。时间可以分为(1)内部时间,指对象自身变化;(2)外部时间,指对象外部的变化;(3)整体时间,指无数参与者的整体的变化,不发生相互作用的对象之间的整体时间不存在这 (4)局部时间,指局部的变化; (5)平均时间,指参与比对的所有对象的变化/参与对象的个数;(6)相对时间,指宇宙中某个区域的变化或相对于其他对象变化的时间。静止的对象或静止的时间就是空间,运动变化的空间就是时间。空间+运动=时间,时间+静止=空间,运动与静止的相对性决了时间、空间的相对性。任何状态在时空上都是有限的,占有一定空间,经历一定时间。状态与过程不过是无限发生的事物的一个有限环节。
1.2 状态机的简述
关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态, 状态机停止。
包含一组状态集(states)、一个起始状态(start state)、一组输入符号集(alphabet)、一个映射输入符号和当前状态到下一状态的转换函数(transition function)的计算模型。当输入符号串,模型随即进入起始状态。它要改变到新的状态,依赖于转换函数。在有限状态机中,会有有许多变量,例如,状态 机有很多与动作(actions)转换(Mealy机)或状态(摩尔机)关联的动作,多重起始状态,基于没有输入符号的转换,或者指定符号和状态(非定有 限状态机)的多个转换,指派给接收状态(识别者)的一个或多个状态,等等。
传统应用程序的控制流程基本是顺序的:遵循事先设定的逻辑,从头到尾地执行。很少有事件能改变标准执行流程;而且这些事件主要涉及异常情况。“命令行实用程序”是这种传统应用程序的典型例子。
另一类应用程序由外部发生的事件来驱动——换言之,事件在应用程序之外生成,无法由应用程序或程序员来控制。具体需要执行的代码取决于接收到的事件,或者它 相对于其他事件的抵达时间。所以,控制流程既不能是顺序的,也不能是事先设定好的,因为它要依赖于外部事件。事件驱动的GUI应用程序是这种应用程序的典 型例子,它们由命令和选择(也就是用户造成的事件)来驱动。
Web应用程序由提交的表单和用户请求的网页来驱动,它们也可划归到上述类别。但是,GUI应用程序对于接收到的事件仍有一定程度的控制,因为这些事件要依赖于向用户显示的窗口和控件,而窗口和控件是由程序员控制的。Web应用 程序则不然,因为一旦用户采取不在预料之中的操作(比如使用浏览器的历史记录、手工输入链接以及模拟一次表单提交等等),就很容易打乱设计好的应用程序逻辑。
显然,必须采取不同的技术来处理这些情况。它能处理任何顺序的事件,并能提供有意义的响应——即使这些事件发生的顺序和预计的不同。有限状态机正是为了满足这方面的要求而设计的。
有限状态机是一种概念性机器,它能采取某种操作来响应一个外部事件。具体采取的操作不仅能取决于接收到的事件,还能取决于各个事件的相对发生顺序。之所以能 做到这一点,是因为机器能跟踪一个内部状态,它会在收到事件后进行更新。为一个事件而响应的行动不仅取决于事件本身,还取决于机器的内部状态。另外,采取 的行动还会决定并更新机器的状态。这样一来,任何逻辑都可建模成一系列事件/状态组合。
状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:
① 现态:是指当前所处的状态。
② 条件:又称为“事件”,当一个条件被满足,将会触发一个动作,
或者执行一次状态的迁移。
③ 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的
状态,也可以仍旧保持原状态。动作不是必需的,当条件满足
后,也可以不执行任何动作,直接迁移到新状态。
④ 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而
言的,“次态”一旦被激活,就转变成新的“现态”了。
2 程序异常状态的认识
程序中的状态分为可控状态和异常状态,可控状态是指在程序运行时对程序各种运行条件的判断,如关系运算、逻辑运算等,都是可控状态的处理。异常状态主要是指程序在系统级的出错控制,如空指针、非法运算、内存溢出等。可控状态的处理,在很多书里都有说明,在此我们只谈异常状态的处理。
异常处理,英文名为exceptional handling, 是代替日渐衰落的error code方法的新法,提供error code 所未能具体的优势。异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解。
异常处理(又称为错误处理)功能提供了处理程序运行时出现的任何意外或异常情况的方法。异常处理使用 try、catch 和 finally 关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。 异常处理通常是防止未知错误产生所采取的处理措施。异常处理的好处是你不用再绞尽脑汁去考虑各种错误,这为处理某一类错误提供了一个很有效的方法,使编程效率大大提高。异常可以由公共语言运行库 (CLR)、第三方库或使用 throw 关键字的应用程序代码生成。
异常处理的特点如下:
1.在应用程序遇到异常情况(如被零除情况或内存不足警告)时,就会产生异常。
2.发生异常时,控制流立即跳转到关联的异常处理程序(如果存在)。
3.如果给定异常没有异常处理程序,则程序将停止执行,并显示一条错误信息。
4.可能导致异常的操作通过 try 关键字来执行。
5.异常处理程序是在异常发生时执行的代码块。在 C# 中,catch 关键字用于定义异常处理程序。
6.程序可以使用 throw 关键字显式地引发异常。
7.异常对象包含有关错误的详细信息,其中包括调用堆栈的状态以及有关错误的文本说明。
8.即使引发了异常,finally 块中的代码也会执行,从而使程序可以释放资源。
一种称为"终止模型"(它是Java与C++所支持的模型).在这种模型中,将假设错误非常关键,将以致于程序无法返回到异常发生的地方继续执行.一旦异常被抛出,就表明错误已无法挽回,也不能回来继续执行.
另一种称为"恢复模型".意思是异常处理程序的工作是修正错误,然后重新尝试调动出问题的方法,并认为的二次能成功.
对于恢复模型,通常希望异常被处理之后能继续执行程序.在这种情况下,抛出异常更像是对方法的调用--可以在Java里用这种方法进行配置,以得到类似恢复的行为.(也就是说,不是抛出异常,而是调用方法修正错误.)或者,把try块放在while循环里,这样就可以不断的进入try块,直到得到满意的结果.
虽然恢复模型开始显得很吸引人,并且人们使用的操作系统也支持恢复模型的异常处理,但程序员们最终还是转向了使用类似"终止模型"的代码.因为:处理程序必须关注异常抛出的地点,这势必要包含依赖于抛出位置的非通用性代码.这增加了代码编写和维护的困难,对于异常可能会从许多地方抛出的大型程序来说,更是如此。
3 JAVA语言中的异常状态处理
3.1 简介
异常是程序执行时遇到的任何错误情况或意外行为。以下这些情况都可以引发异常:您的代码或调用的代码(如共享库)中有错误,操作系统资源不可用,公共语言运行库遇到意外情况(如无法验证代码),等等。向对象中每增加一个类,都可能包含一些错误。Java使用和C++类似的异常处理
a) 处理错误的方法有很多流行方法
b) 一般方法是把程序处理代码段分散到系统代码中,在可能发生错误的地方处理错误
优点:便于程序员能够条理的看到程序中异常的处理
缺点:异常处理程序“搅乱”代码,程序员很难关心程序本身能否正常完成功能,而只关心了性能。
c) 常见异常实例包括:数组下标越界,算法溢出(超出数值表达范围),除数为零,无效参数、内存溢出
异常处理功能:主要处理一些同步异常(除数为0),不宜处理一些异步事件(Disk I/O End、网络信息到达、点击鼠标、敲击键盘)这些最好使用java事件监听。
异常处理程序:能够让系统在出现异常的情况下恢复过来的程序使用异常处理情况:异常诊断与异常处理不在同一个位置下时使用异常处理程序(若用户一直通过键盘与程序通话,那么就不能使用处理键盘输入处理)。使用异常的注意事项:
1、 异常处理位置与异常发生位置必须不同(若一个程序能够处理自己的错误,那么就采用传统的错误处理方式进行局部处理)
2、 要避免使用异常处理来代替错误处理,若这样就会降低程序的清晰性。
3、 尽管可以使用异常处理来代替错误处理,但会降低性能
4、 异常处理会占用程序的格外执行时间
5、 异常处理能够提高程序的容错性
6、 程序员使用JAVA标准的异常处理功能来代替他们的专用方法,可以在大型项目中提高程序的清晰性
7、 异常是超类Exception继承的子类,主要如何处理“未扑获的异常”,无法预料的异常。
8、 异常处理在java中原理:异常处理有Method调用者的调用者或者Method调用者来处理,
9、 异常处理适用分别开发的组件系统
10、 因为一些程序员使用不支持异常处理语言编程时,往往拖延或忘记错误处理程序的编写,故,Java强制程序员从项目一开始就着手进行异常处理,程序员必须投入很大精力把异常处理的策略融合到软件产品中
11、 最好在进行系统设计是就把异常处理融合在系统中,若系统一实现,就很难添加异常处理功能
3.2 如何使用异常处理:
在以下情况下使用异常处理:
1、 当方法因无法控制的原因而不能实现其功能时;
2、 处理来自程序组件整体异常,这些程序组件不适宜直接处理异常
3、 在大型项目中,对于每个项目都以一致的方式进行错误处理
4、 在类库中出现每一个异常,都需要一个惟一错误处理,在类库中使用异常处理很合适
3.3 java异常处理的基础:
java的异常处理适用于在一个方法中能够检测出错误单不能处理错误的情况,这样方法将抛出一个异常(JAVA无法保证“存在”的异常处理程序能够处理某种异常,若“存在”,就“捕获”异常,并处理“异常”,如找不到,那么:
命令行APP/控制台APP(不基于GUI),当异常不能被“捕获”,那么该程序会运行默认异常处理程序,退出JAVA,若Applet或基于GUI的APP,当一个异常未被“捕获”,GUI在运行默认异常处理程序依然会显示,而且用户使用的GUI处于一个不稳定的状态)
JAVA代码中:可能出现异常的代码-----
{ …… try{抛出一个异常}-----程序块 ……
catch1{异常处理程序1};
……
catch100 {异常处理程序100};
finally{无类是否出现异常都执行的程序}
a) 若try抛出Exception,App寻找在Catch1~100寻找合适异常处理程序,若找到,执行CATCH{}代码,没有,执行最后一个catch{}后代码
b) 若try未抛出Exception,就执行执行最后一个catch{}后代码。
c) throws子句来抛出指定的异常,异常抛出点(throws 语句位置、try{}程序块、try()程序块中直接和间接调用的方法中)
d) java采用终止方式异常处理,不是恢复方式的异常处理
e) 发生异常时,异常周围信息(抛出对象本身类型)-------------异常处理程序
3.3.1 try程序块:
try{
……}
catch(){
…….}
finally{ ……}
try后面跟0~多个catch程序块。若try抛出Exception,App寻找在Catch1~100寻找合适异常处理程序,若找到,执行CATCH{}代码,没有,执行最后一个catch{}后代码若try未抛出Exception,就执行执行最后一个catch{}后代码。finally{无类是否出现异常都执行的程序,必须完成资源释放即终止函数调用,可避免资源泄露}
3.3.2 throw抛出异常:
throw 子句用来抛出异常,而throws子句用来指定异常。throw 的操作数是Throwable所有派生类,Throwable的直接子类是Exception(异常,由应捕获的问题引起,应进行处理)与Error(重大系统问题,一般不捕获)。抛出异常抛出点有try{}块、, try{}块某个深层嵌套的作用域、try{}块某个深层嵌套的方法中,throws指定异常,throw抛出的异常 。try{}不包括错误检测语句与throw子句,但它的程序块中所引用的对象将会执行构造函数中的错误检测代码,并抛出异常
我们只要求异常终止产生异常的程序块执行,而不停止整个程序
异常信息传递通过对象引用产生,然后让catch块中的参数名(对象名)引用
3.3.3 catch捕获异常:
异常处理程序包含在catch程序块中。语法:
catch (classNmae---指定要抛出的异常的类型,参数名-----用来引用处理程序捕获的对象)
{javaCode -----处理异常可执行代码}
catch使用注意事项:
1、 若假设异常处理之后,程序控制将返回throw后的第一个语句,那么将导致逻辑错误
2、 将catch程序块的参数不能设置成多个,一个catch只有一个参数
3、 若两个catch程序块(均和某个try程序块有关)都用于捕获同一类型异常,那么将产生语法错误
4、 捕获特殊异常可能找不到,需要在下一层try中找,若找不到,那么命令行APP/控制台APP(不基于GUI)将退出程序,Applet或基于GUI的APP将继续执行处于一个不稳定的状态的APP
5、 若某一类型异常,可能有几个异常处理程序与他相匹配,那么执行first相匹配的异常处理程序
6、 一个程序可以同时处理许多关系密切的异常,我们可谓此ExceptionGroup提供1个异常类与catch处理程序,当某个异常发生时,可根据不同的实例数据创建异常对象,同时catch检查该数据,以判断异常的类型;我们一般不提倡此种编程风格,最好用继承的方法解决
7、 在异常处理程序中,不能访问try块中定义的对象,异常处理开始,try快结束
8、 若执行某个异常处理程序时又抛出一个异常,原try块已经终止,那么就让原try外层try处理程序进行处理,同时外层try程序监视并处理原try块的catch处理程序产生的错误
9、 异常处理程序的形式:A、重抛出异常;B、通过抛出另一种不同类型的异常来转换异常类型;C、通过执行完最后一个异常处理程序之后,完成任何必要的恢复工作并使程序继续执行;D、判断产生错误的原因,然后处理,并重新调用原来曾产生该异常的方法 E、简单向Runtime返回一个状态值 ……………等等
10、 传统的控制流不使用异常,因“额外的”异常会“掩盖”那些真正的错误类型的异常,程序员很难跟踪那些大量的异常,而且这里的异常不是经常见到的
11、 catch处理程序抛出一个异常,将由catch处理或与同1个try块相关的其他处理程序来处理,就会产生逻辑错误
3.3.4 finally程序块
若程序显示使用某些资源,那么必须在最后完成对资源的释放即无庸单元回收,在C与C++中,常见是指针不能回收,函数不能终止,出现“内存泄露”
java实现自动的无庸的单元回收功能,可避免“内存泄露”,但java同样存在别的“资源泄露”一般在finally程序块中使用一些资源释放的代码。
1、 finally程序块将try程序块中所有打开文件关闭
2、 java并没有彻底消除资源泄露、当某个对象不存在是,java才对该对象进行无庸单元回收处理,当程序员错误的对某个对象保持引用时,就会出现内存泄露
3、 exception ( String informationString):其中informationString是对该类异常描述信息,而获得信息使用getMessage(用于返回保存在某个异常中的描述字符串)。PrintStackTrace(用于把方法调用堆栈的内容打印出来,对测试程序特别有用)。