Java异常处理分析

2024-10-19

Java异常处理分析(共8篇)

Java异常处理分析 篇1

1 引言

随着互联网的不断发展, 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.

[3]王红霞.Java程序设计基础教程.北京:中国电力出版社, 2009.

Java异常处理分析 篇2

一、机组甩负荷

1、根据负荷下降程度,减少进煤量,必要时从上至下切除制粉系统。燃烧不稳定时,应及时投油助燃,稳定燃烧。

2、当负荷迅速下降,汽压上升较快时,应立即打开对空排汽,放汽泄压。若汽压超过安全门动作定值而安全门未动时,应手动打开安全门放汽;若安全门拒动锅炉超压时,应紧急停炉。

3、注意监视锅炉水位变化,防止水位波动造成缺水或满水。抽汽压力不能满足小汽机,除氧器需要时,应检查确认其备用汽源切换正常。必要时开启电泵供水。

4、注意调节轴封汽压力,凝汽器水位,除氧器水位,加热器水位。检查机组各支持轴承,推力轴承金属温度,回油温度,轴向位移,胀差、汽压、汽温,振动等是否正常,倾听汽轮机内有否异声。

5、检查厂用电系统是否正常,如不正常立即倒为备用电源,采用切工作开关,备用开关自投方倒换,若自投不成,可抢送,但工作开关必须在分位。

6、过、再热汽温低时,锅炉及时解列减温器,打开过再疏水;汽机打开过,再主汽门前疏水。根据现象和各表计的指示,分析查明原因,做好恢复准备,恢复时控制好升压、升温速度,防止超温。

二、高压厂用电中断

1、如果备用电源自投成功,母线电压正常,及时检查有无掉闸设备,恢复因低电压掉闸的设备。

2、若备用电源自投不成功,机组未掉闸,锅炉未灭火时,应立即投油助燃,稳定燃烧,维持炉膛负压,降负荷运行。若因失电造成锅炉灭火或全部给水泵掉闸,应紧急停炉。按照停炉不停机处理。

3、如果失去全部电源,不破坏真空紧急停运机组,启动柴油发电机,送上保安电源,保证事故油泵、盘车等设备运行电源。启动汽机直流润滑油泵,小机事故油泵,空侧直流密封油泵运行,注意各瓦温的温升变化情况,同时调小油氢差压且注意密封油箱油位上升情况,否则手动排油。检查空预器运行情况,维持其转动状态(若主辅电机均不能投入运行,应进行手动盘车)。

4、如果备用电源自投装置拒绝动作,可立即手动,强送备用开关(切掉厂用同期装置非同期闭锁手把并确认工作开关断开);强送后保护动作又掉闸,可认为母线故障或负荷故障,保护未动或拒动引起的越级跳闸,应将母线所有开关断开,摇测母线绝缘良好,恢复母线运行,若为母线故障,应立即消除故障,恢复运行或转检修,母线无问题逐一恢复负荷。

三、低压厂用电中断

1、备用电源自投成功,母线电压正常,应及时检查有无掉闸设备。恢复因低压掉闸的设备,并查明故障原因。

2、如低压厂用电源部分中断,而锅炉未造成灭火时,应立即投油助燃,稳定燃烧,待电源恢复后,恢复正常运行。

3、如果因低压设备掉闸而引起高压设备掉闸,造成机组停运或锅炉灭火,紧急停运机组。

4、低压厂用电源全部中断,紧急停止机组运行。

5、空气预热器主电机掉闸,辅助电机自动投入时,隔离掉闸空预器,按锅炉单侧运行处理。若空预器主辅电机均不能运行时,应手动盘车。

6、备用电源自投装置拒绝动作,可立即手动抢送备用开关;抢送后保护动作又跳闸,可认为是母线故障或负荷故障保护未动或拒动引起的越级跳闸,应将母线所有开关断开,摇测母线绝缘良好,恢复母线运行;若为母线故障,应立即消除故障,处理不了转检修,母线恢复运行后,逐一恢复负荷。

四、机组紧急停运

1、将厂用电源倒为备用电源。在系统及设备允许的情况下,全减负荷到零,由汽机打闸停机。

2、汽轮机进行打闸操作,注意转速应下降,防止超速;发电机应解列,锅炉灭火,否则手动MFT,解列发电机。

3、如果机组打闸后,主汽门未全部关闭时,紧急停全部抗燃油泵,就地进行一次打闸操作。

4、应检查联关阀门正常,否则应手动关闭。

5、启动交流润滑油泵;开启真空破坏门,停止射水泵;转速降至1200~1000rpm时,启动顶轴油泵,并适当降低润滑油温。

6、轴封倒为主汽供给,真空到零后停止轴封供汽,禁止向凝汽器排放热汽、热水。

7、锅炉灭火后进行吹扫,启动电动给水泵向锅炉上水。

8、对于发电机故障引起的机组跳闸,应检查保护动作原因,确定是否可以启动;锅炉进行点火,保证汽机所有辅机运行正常,除氧器、轴封倒为辅助汽源供汽,维持凝器汽、除氧器正常水位,作好机组迅速恢复的准备。

9、对于汽机保护引起的跳闸,应对跳闸原因进行确认,决定机组是否再启动。

五、锅炉掉闸机组不停运

1、锅炉发生MFT后,立即用同步器在维持负荷下降速率的前提下,将负荷降至150MW以下,尽力保持较高的蒸汽参数。

2、机组的厂用电源切换至备用电源,立即启动电动给水泵。

3、锅炉解除全部减温水,汽机切除高、低压加热器,关闭轴封至除氧器进汽门,除氧器切换外来汽,轴封汽源倒为主蒸汽。

4、试验汽轮机各油泵及盘车电机。

5、锅炉查明MFT原因后,尽快点火,通过增加燃料,打开排汽等手段尽力提高汽温,当汽温接近缸温时,应逐渐开大调速汽门,增加负荷,以加快升温速率。

6、视主、再热蒸汽温度下降情况,打开主汽门前疏水。若因锅炉满水造成MFT,而使汽温急剧下降时,则立即停机。

7、必须密切监视汽轮机的振动,轴位移,胀差及缸温变化情况,如超极限则立即停机。

六、蒸汽热力参数异常

1、汽轮机前主、再热蒸汽温度升高,温度>542℃时,应调整恢复;当温度升至547℃时,必须立即降温;当温度在547~557℃之间摆动时,连续运行时间不允许超过15分钟。

2、机前主、再热蒸汽温度下降至527℃以下时,应调整恢复;汽温降至520℃以下时,应按规程中对应关系减负荷,并适当降低汽压,保证蒸汽过热度不低于120℃。

3、主、再热蒸汽温度左右偏差增大,或主汽与再热汽温度偏差增大时,必须尽快恢复到允许温差范围内。

4、蒸汽参数异常时,应加强监视机组的振动,轴向位移,推力瓦温度、胀差及汽缸温度并检查机组有无异常声音。

七、机组仪表及热控电源(气源)消失

1、热控仪表电源(包括计算机电源)失去时,维持机组稳定运行,尽量不进行操作。严密监视主要运行参数。

2、若短时间失电,发现运行参数越限,应手动到就地操作调整。

3、联系热工人员,迅速查明原因,恢复电源;如短期电源不能恢复时,应请求停机。

4、热控及仪表电源全部失去,应紧急停止机组运行。

5、控制汽源中断或控制气源低于0.6MPa时,应启动备用空压机。若气压继续下降至所有气动执行机构因断气自锁时,运行人员禁止操作所有气动执行机构。维持机组稳定运行,尽量不进行操作。

6、如控制气源短期无法恢复正常时,应请求停机。

八、火灾

1、现场失火时,应根据情况进行灭火。如火势较小时,可使用干式灭火器、二氧化碳灭火器、1211灭火器灭火;如火势较大,应迅速通知消防队,在消防人员未到之前,应设法控制火势的蔓延,搬开火场周围的易燃品。

2、电气设备着火时,必须立即断开其各侧开关、刀闸;将其电源断开才可进行灭火,灭火时用四氯化碳或二氧化碳灭火剂。

3、油系统着火,且不能很快扑灭,严重威胁设备安全时,应紧急停机,并立即进行灭火。当火势严重威胁到油箱安全时,开启油箱事故放油门放油。

4、发电机着火立即破坏真空紧急停机,并迅速切断氢源和电源,使用二氧化碳或1211灭火装置进行灭火。

5、由于漏氢而着火时,首先应断绝氢源或用石棉布密封漏氢处。不使氢气逸出。保证密封油及冷却系统正常,用二氧化碳灭火剂灭火。根据氢压确定带负荷大小。

九、厂用电动机异常运行处理导则

1、启动过程或运行中电动机开关自动断开,应检查保护动作情况,摇测电动机绝缘及通路,判明电动机有无故障,决定是否再启动。

2、运行中电动机温度突然升高或急剧升高,检查电动机电流有无升高,三相电流是否平衡,找出温度升高原因,采取相应措施,使电动机恢复正常运行。

3、低压电动机投热偶的开关掉后,检查所带动的机械有无犯卡,电动机有无两相运行,一切都正常后,恢复热偶再次启动,测三相电流应平衡,转速声音都正常。

4、在下列情况下,对于重要的厂用电动机可先启动备用电动机,然后再停止运行电动机:

a、发现电动机有不正常声音或绝缘有烧焦的气味; b、电动机内或起动调节装置内出现火花或冒烟; c、定子电流超过正常运行的数值; d、出现强烈的振动;

e、大型闭式冷却电动机的冷却水系统发生故障; f、轴承温度出现不允许的升高。

5、重要的厂用电动机失去电压或电压下降时,在1分钟内禁止值班人员手动切开电动机。

十、生水系统异常

1、根据系统情况,限制非生产用水;限制水塔补水;以至限制化学制水补水。

2、通知水工暂停用循环水除灰。

3、停止循环水塔排污。

4、停止机炉一切疏、放水及排污。

5、所有系统设备的冷却水可倒用循环水供给者,均倒用循环水供水。

Java语言异常处理技术分析 篇3

1 Java语言异常的结构与分类

Java语言异常的定义, 即因程序执行错误而产生的异常对象。往往与Java语言异常处理技术机制相互对映。Java语言异常处理技术机制可以用来辨别、筛选、和解决异常。Java语言异常处理技术机制工作效率较高。不仅可以让java语言编写的程序更加完善、可靠、健壮还有利于解决异常。其他以往的异常处理技术, 往往采用的是执行一条跳转指令或者结束程序的进程或者异常发生时调用级别较低的函数处理等来处理异常。

1) Java语言异常的结构。

在Java中的系统类Throwable的子类涵盖了系统中所有异常类, 项目Object产生Throwable, 然后Throwable相应产生了:Exception和Error两个子类。Exception主要是指, 程序在运行的过程中可能捕获的异常。Exception类派生的还有Runtime Exception这个极其重要的子类, 在Java中Exception类和Runtime Exception类一同被称作是Java程序运行时产生的异常。例如除数为零或者下标超出范围这类异常是运行过程中产生的错误。Error一般是由系统异常引起的, 不但不可恢复, 而且在一般情况下是不愿意被程序检查获取的。主要是指Java虚拟机 (JVM) 异常或者系统异常, 代表了严重的系统异常。

2) Java语言异常的分类。Java语言异常的种类有两种, 一是系统定义的, 一种是用户定义的。系统定义异常的种类有很多主要包括:非法的输入、输出引起的Io Exeeption异常、由数据类型匹配引起的Numbcr Fomat Exception异常、由算数错误, 比如除数为0引起的Arithmetic Exception异常、由下标超出范围引起的Index Out Of Bounds Exception异常、由中断引起的Interrupted Exception异常等。系统自定义的异常种类无法满足用户需求时, 用户就自己定义异常。该过程中的异常对象是由程序员依据程序的需要来创建的。为使程序可以自动抛出异常, 程序员在创建的过程中, 最先应当创建的是异常的种类。运用Exception建立新类, 通过继承来使创建的子类可以与父类拥有同样的处理代码和接口。

2 Java语言异常处理的种类和优势

Java语言异常处理的原则指的是java程序在运行的过程中会出现各式各样的运行错误, 这些错误会产生对应的异常的对象, Java语言异常处理技术则是把这些异常对象进行采集统一处理。把正确的代码和异常的代码分类处理。Java的异常处理可分为以下三个方面:第一、Java程序进行执行时, 若在此时产生了系统可查出的异常, 那么系统会自动产生一个和该异常相匹配的异常类的对象, 同时这个异常对象会被送到Java运行时所在的系统, 这个异常处理即抛出异常。第二、如果Java程序运行时所在系统接入到异常对象, 会自动查询能解决这一类异常的程序代码, 然后这类异常对象就统一由这一程序处理, 该异常处理就是捕捉异常。第三、假如Java程序运行时所在的系统不能查询到处理这类异常的匹配的程序, 则系统自动强制结束程序的运行, 然后采取利用处理缺省异常程序的方法来处理。

1) 处理种类。

抛出异常可以理解为:用Java语言编写的程序在运行的时候被检查到有可以查出的异常, 因此而产生了一个与之匹配的异常的类的对象。这个与异常匹配的对象中涵盖了错误的种类和发生异常时的程序所处系统的状态情况。抛出异常有两种:一是在程序执行过程中用throw语句指定抛出异常。二是系统自动抛出异常。在程序执行过程中用throw语句抛出异常是指在main函数中调用throw语句将异常抛出。系统自动抛出异常是指除了用户定义之外的异常均可由系统抛出。比如, 当数组下标超出范围时, 系统识别异常并且把异常抛出。此时, 系统把异常与系统中的预定义的错误种类进行匹配识别, 然后匹配成功来终止程序的执行。捕捉异常和终止程序结束异常是指在一些特殊的情况下, 系统不知道如何去处理错误, 会将异常向上抛。如果Java程序运行时所在系统接入到异常对象, 会自动查询能解决这一类异常的程序代码, 然后这类异常对象就统一由这一程序处理, 那么就会捕捉异常进行处理, 假如Java程序运行时所在的系统不能查询到处理这类异常的匹配的程序, 则系统自动强制结束程序的运行, 然后采取利用处理缺省异常程序的方法来处理, 那么就是终止程序结束异常。

2) Java语言异常处理的优势。与传统的异常处理方式, 比如:一条跳转指令、结束程序的进程、异常发生时调用级别较低的函数处理等相比, Java语言异常处理技术把异常进行了分类, 识别了异常的种类让程序员清楚地知道哪里发生异常, 发生了什么异常以及异常产生的原因, 还把错误代码和正确代码进行了分离, 利于处理, 提高了程序的可靠性和安全健壮性。不仅可以对异常进行分类管理还能使异常被系统捕获, 并且进行下一步的处理, 使程序员工作的效率得到提高。

3 结论

Java语言异常处理的技术把正确代码和异常代码进行分开处理, 体现了Java语言异常处理技术的优点和先进性。但是, Java语言异常处理技术会增加程序运算量, 给计算机带去处理Java语言异常的其他开销, 所以相关编程人员应当注意异常的处理, 在编程的过程中, 科学合理的使用Java语言异常处理技术对于编程工作者写出健壮可靠的代码是十分有必要的。Java语言异常处理技术不仅能提高程序整体的可靠性, 还能避免编程人员在工作上出现重大的错误, 有利于编程工作者的编程工作。身为一名编程工作者, 应当加强对Java语言异常处理技术的运用能力。

摘要:Java语言异常处理技术是Java语言的重要技术特点, 准确科学的处理Java语言中存在的异常, 这样做对于维持程序的健壮性和可靠性是特别关键的。Java语言异常处理技术分析的主要原理就是在理解了Java语言异常处理技术分析的主要思想之后, 在Java语言的所处环境中, 对Java中出现的异常进行有针对性的实质性的检查指导, 并且对这些异常加以处理, 使之得到解决。本人研究了Java语言异常处理技术的思想和概念, 并且对Java语言异常处理的技术进行了具体的分析, 找到了解决方法。

关键词:Java语言,异常处理,结构,分类,技术分析

参考文献

[1]袁小英.基于Java语言的异常处理机制的研究[J].计算机光盘软件与应用, 2011 (16) :115, 158.

[2]韩瑞峰.J a v a异常处理机制及应用研究[J].忻州师范学院学报, 2012, 28 (2) :25-27.DOI:10.3969/j.issn.1671-1491.2012, 02, 009.

浅析Java异常处理机制 篇4

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.

试析Java语言异常处理技术 篇5

1 Java语言异常化处理的优势

Java语言对于程序中的异常问题的处理,往往首先在于对异常进行分类,借助不同结构和层次分类后能够对单项异常进行准确处理。异常处理实现了程序代码中出现错误段与正常段的分离,对于程序的可读执行性增强。错误在发掘后,会被传递到执行事件管理的调用堆栈中。异常处理技术能够主动捕获未发觉的错误并进行处理。这些技术优势确保异常处理的准确性大大提升。

Java语言的异常处理一般借助5个关键字“try、catch、throw、throws、finally”完成。基本思想为:先用try语句对存在疑问的局域进行监管,当try语句内有异常,则会及时被抛出,程序代码随着catch语句块的执行得以实现异常捕获并处理;通过throws语句方法声明并执行抛出,后在内部完成throw抛出异常;finally语句一般在return实现执行前处理,一般结构如下:

2 Java语言的异常分类

Java语言一般会根据特殊性的层次结构来进行对象化分类。首先看Java语言的类层次结构,异常类语言基本出自Throwable的子类,而可以按照逻辑错误Error类和Exception类来扩展Throwable子类分支。

在两类分支中,Error及其子类体系基本围绕程序运行错误及系统资源消耗殆尽等异常进行展示,语言编译单元不会直接检查整个Error及其子类体系。而Exception类又可以直接扩展为3类分支:运行时异常(Runtime Exception)、输入输出流异常(IO Exception)和用户自定义异常类,最后一类分支可以用图式**Exception表示。运行时异常(Runtime Exception)属于程序编写运行的错误,语言编译单元不会直接检查,因此与逻辑错误Error类一同可以称之为未被检测的异常。当出现未检测异常后,大多数依靠程序员的个人能力挖掘错误并及时修改。而输入输出流异常(IO Exception)和**Exception用户自定义异常类,则属于已经接受检查的异常。当程序员要对这些异常展开处理时,需使用“try-catch”来完成语句的捕获,当然也可以使用“throws”语句产生申明行为,完成异常部分的抛出,以便完成最后的编译工作。

通过上述的结构层次划分,可讲Java语言的异常分为用户自定义类或系统定义两种。用户自定义的异常一般就是由程序编译人员对程序的内在逻辑进行解读,根据需要创建特有异常对象,这些异常都与程序中的异常错误积极对应。在对自定义异常进行创建或抛出阶段,第一步应该使用Exception的子类创建方式定义异常类,并有效延续Exception类逻辑得以实现。Java语言是面向对象的语言,因此用户自定义的异常类与Exception类都有相同的面向对象相接的端口,也在这些端口中能够解析中定量的代码。通常,自定义用户异常的格式如下表示:

如下列代码段:

而由系统定义的异常类别,则可以包含在系统运行或程序数据处理过程中可自行预见的异常错误。系统条件中的类的定义同时也囊括了程序运行的错误信息,并附有合理的解决处理方案。如表1所示,可以将相应的系统自定义异常标识与异常缘由一一对应。

当然,无论是系统定义异常类还是用户自定义异常类,都不能单独成为描述系统全部异常状况的概括,同时也就无法准确地返回到用户需要了解和获知的详细信息。

3 Java语言的异常处理应坚持的原则

3.1定义异常位置的层次感

Java语言出现异常情况后需要处理,应先定义异常类,按照不同的类别将异常的实际反应与不同的目标对象进行对照例化。可以将定义Java语言的异常类当作是构建一棵大树的主要躯干部分,同时大树的每个部位可以对应在程序中出现的异常,这些树干部位都已经提前做好定义。当没有找到树干的定义异常部位后,就需要按照增添方面完成对新的异常树干位置的补充。异常分类的不同定义,因此具有了层次化的位置处理,在后期的程序代码维护中便于处理,同时其一一对应的关系能够帮助用户更快地通过异常找到导致的原因。

3.2声明异常的精准化原则

在对异常进行声明时坚持精准化原则,能够更快对应找准异常产生的缘由。例如,当输入输出流异常IO Exception类的体系运行时,往往在定义My Read方法中,需要声明其属于输入输出流异常IO Exception类,而不会因为IO Exception类属于Exception类的子类分支,将声明改为Exception类,具体的语句格式可见:

通过精准的声明定位,能够将语句后部分的抛出位置指定的更加具体。

3.3异常try语句块的简易原则

Java语言的异常处理中,常需要将各种异常可能性置于较大容量的try语句块中,这样整合的做法就是非常有利于程序的编写。不过也会导致很多的不利结果:try语句块容量加大后,相应的异常数也会增多,在海量数据中挖掘报错的原因无疑增加了难度。同时,大容量的运行容易导致系统在解读和运行程序时内存或CPU处理超负荷损毁的风险加剧,无疑为程序编码的运行效率产生不小的制约。

3.4避免异常遮掩

容纳语言异常的try语句块在接受处理并抛出后,如果同时伴随catch或finally语句块中出现已检查异常抛出,就有会部分异常因间隙的存在被遮掩。处于被遮掩状态的异常将无法及时传播,而最后阶段的外围异常则会传递到调用堆栈。这样的情况下,程序很可能在运行中因异常的遮掩累积而出错停止。而且,想要重新寻找异常的导致原因,还需要让异常不受遮掩,也就是避免在try语句块抛出后立即伴随catch或finally语句块抛出。

3.5异常段自动隔离

很多Java程序语言都存在可循环的执行语句。当执行语句在运行中持续循环后,一旦产生异常,那异常就会在这样的循环结构中反复执行,从而直接影响到其他程序语言,出现更多的异常。异常处理技术中常会采用中断跳转模式,即程序运行中出现异常会中断运行,并跳转到其他位置。如果在循环中大量出现异常段,只会让程序的运行频繁跳转,不仅增加运行消耗,使得程序的执行速度降低,而且特别容易出错,还无法有效查询到错误发生的原因,一般上如果不把异常段与循环结构体主动隔离,则主程序的报错很难实现有效恢复。

3.6异常事件的资源清理

在Java语言中,异常事件产生后会产生包括操作痕迹的资源,常用finally块来完成清理。finally块的使用应在开始资源释放前就得到更为准确的应用,要采用一对一的形式。若因两个以上资源同时定义一个finally块,则可能存在其他资源出现申请错误或释放错误,这样就不太利于第一资源的积极释放。异常事件处理中,必然要注意finally块与资源申请语句的对应呈现,才能让资源得到有效利用。

4常见两种异常处理方式

Java对于异常出现后的处理,往往将可识别的错误包装成对应的类对象,统一集中在对象程序段中实现处理。对于异常代码一般有两种处理办法:

4.1 try...catch语句

try...catch语句方法的使用,便于捕获并及时处理异常事件。catch语句可实现多个排列,以便保障不同异常的对应,例如:

4.2 throws语句

在Java语句中存在很多异常有时较为难处理,可以借助方法声明,由throws语句完成异常事件的抛出。例如:

当然,并不是所有的方法都只要简单抛出就行。若某方法可以简单抛出异常事件,则在用于方法调用的多层次嵌套结构中采用调用,Java虚拟机就能够主动在有异常状况出现的代码块中重复地读取扫描往返寻找,一直待异常代码块完成最终处理为止。异常快被找出后将由catch语句执行处理。

当然,如Java程序存在的系统要采用方法调用直接追溯到堆栈最底层后,调用main()方法寻找异常时,若尚且未找到异常处理码,就需要按照下列步骤完成处理:

(1)调用print Stack Trace()方法。这一方法可以将调用栈的出现异常的信息数据直接打印。

(2)若异常线程认定为主线程,程序运行就会直接受影响被终止;但如果认定为非主线程的异常,则单线程的终止不会影响其他线程的运行。

5结语

Java语言异常处理技术可以正确识别出错与正常的代码,并分离式处理,具有一定的优越性。在异常处理同时,要注意随着程序运算量的增加可能导致计算机的运行变慢。因此,对于广大编程人员而言,采用什么方法来完成异常处理应该需要慎重对待,要在异常处理工作中保持科学合理性。

参考文献

[1]夏宇.基于Java常见异常处理研究[J].计算机光盘软件与应用,2012,(8):182-183.

[2]夏先波.Java JDK实例宝典[M].北京:电子工业出版社,2008.

Java异常处理分析 篇6

1 异常的处理机制

异常产生的位置是在方法内部。我们只会说, 一个方法产生了异常, 而不是一个类或一个变量产生了异常。

Java程序在执行过程中如果某个方法内出现异常, 会自动生成一个异常类的对象 (Throwable) , 该异常对象将被自动提交给JVM, 这个过程称之为抛出 (throw) 异常[1]。异常抛出之后, JVM会寻找能处理这一异常的代码并把当前异常对象交给其处理, 这一过程称之为捕获 (catch) 异常和处理异常。如果JVM找不到可以捕获异常的代码, JVM会终止当前程序的运行, 并打印异常堆栈信息。

2 异常的分类以及继承关系

在Java中, 异常情况分为两在类:Exception (异常) 类和Error (错误) 类[2]。

1) 错误 (Error) :JVM系统内部错误或资源耗尽等严重情况属于JVM需要负担的责任。

2) 异常 (Exception) :其它因编程错误或偶然的外在因素导致的一般性问题。这类异常得到恰当的处理时, 程序有机会恢复至正常运行状况。

从编程角度也可以把Throwable分为两个分支:

1) 不受检查 (unchecked) 异常, 包括Runtime Excepton及其子类和Error:编译器不要求强制处理的异常。这类异常程序员可以通过小心编码而避免。

2) 受检查 (checked) 异常, 包括除Runtime Exception及其子类外的所有Exception对象:编译器要求必须处理的异常。指的是程序在运行时由于外界因素造成的一般性异常。

在程序中, 如果java设置的异常类不能满足用户需求, 你可以创建自己的异常类, 只需实现Exception接口即可。

3 异常处理机制分析

1) Java异常机制通过try、catch、finally、throw和throws五个关键词进行处理[2]。处理的基本步骤为:

抛出异常:若某个方法发生异常, 则生成一个相应的异常类, 并抛出至运行时系统。

捕获异常:由匹配的catch语句块, 进行捕获。

处理异常:找到匹配的异常处理进行处理, 若未找到, 则终止当前程序的运行, 并对异常进行缺省处理。

处理方式上, 我们采用捕获 (catch) 异常、抛出 (throws) 异常、捕获和抛出结合使用等方法进行异常处理, 处理过程中可采用try—catch—finally语句结和调用关键throws等方法来实现。

2) 当某个方法, 有可能会出现某种异常时, 可以使用throws关键词来声明异常:

声明了异常的方法, 有两种返回途径:

(1) 正常情况下返回一个String类型的值;

(2) 返回一个异常类的对象;同时结束对该方法的调用。

3) 异常声明语法限制:

(1) 编译器通常对声明异常没有限制, 但是, 如果声明的方法是重写了父类的方法 (或者实现了接口中的方法) , 那么它不能声明父类方法没有声明的异常;换句话说, 子类声明的异常范围只能越来越窄。

(2) 如果方法中存在受检查的异常语句, 或者调用了声明受检查异常的方法时, 那么该方法也必要处理该受检查的异常, 或者声明该受检查异常。

4) 抛出异常:

一般情况下, 声明了异常的方法, 在某个条件下会抛出该类异常的对象。异常的抛出分为两种:

(1) 自动抛出:执行了会抛出异常的Java语句, 例如i=null, j=1;i.equals (j) , 则会自动抛出Null Pointer Exception。或者调用了会抛出异常的方法。例如:a=Integer.parse Int (“b”) , 抛出Class Cast Exception。

(2) 手动抛出:使用throw关键词抛出一个异常类的对象。例如下会的代码:

分析:当fun方法会在age小于0时手动抛出一个异常。

5) Java语言中try—catch—finally语句的使用

对于一个可能出现异常的方法, 可以通过抛出异常, 返还给调用一个异常对象, 让调用者自己处理;也可以在方法内使用try、catch语句进行异常捕获处理。

Java中使用try关键词来监控它所包含的代码块, 当该代码块内抛出异常时, JVM会寻找能处理该种异常的catch块, 来处理该异常。如果没有找到, 该方法将返回一个异常对象给调用者, 如果某段代码在方法返回时必要被调用 (数据库的连接必须关闭、IO流的关闭等等) [3], 则可在finally块中进行处理。但在使用try、catch、finally关键词时, 应注意以下几项:

(1) try不能单独出现;try后必须跟随一到多个catch或一个finally。当然, try后也可以即跟随catch又跟随finally, 但是不能单独出现。

(2) catch的语法限制

catch不能单独出现, 它必须从属于某一个try之后。

catch与try之间不能有代码出现。

catch必须且只能声明一个可以捕获的异常类型。

catch所捕获的异常类型, 应该是try中可能出现的异常类型。

多个catch可以跟随在一个try之后, 但是多个catch之间不能有代码出现, 每个catch捕获的异常类型必须唯一, 并且当捕获的异常类型存在继承关系时, 捕获子类型异常的catch必须在父类型异常的catch之前。

(3) 处理异常时的程序流程

在try块中异常抛出时, JVM不会再执行try块中抛出异常处下面的代码。

抛出异常时, JVM会按顺序寻找能处理该种异常的第一个catch块, 并且只执行这个catch块中的代码, 后面的catch块不再执行。

(4) finally的语法限制

finally不能单独出现, 它必须跟随于某一个try之后。

如果try块后有catch跟随时, finally必须放在catch之后。

finally与try、finally与catch之间都不能有代码出现。

4 结束语

Java异常处理是使用java语句进行软件开发中最重要的一部分, 它可以增强代码的安全性和稳定性。在进行Java编程时, 编译器要求程序员必须对受检查的异常加以处理, 而对不受检查的异常没有要求。总之, 在当程序出现错误或异常时, 应该充分利用异常处理机制, 找出并合理处理异常, 达到优化程序的结果, 使程序可靠性、可读性更强。

参考文献

[1]Bruce Eckeldava.编程思想[M].北京:机械工业出版社, 2002.

[2]卢丹, 小林良岳, 中山健.Java字节码异常处理中信息流的分析[J].应用科技, 2007, 34 (2) :28-29.

Java异常处理分析 篇7

1 异常处理的概念

异常是可被硬件或软件检测到的要求进行特殊处理的异常事件。异常处理作为程序设计语言的组成部分, 对应着Java语言特定的运行错误处理机制, 这种固定的机制用于识别和处理错误。例如, 在程序执行中, 由于应用程序使用系统资源而引发的运行错误就是异常的一种, 而这种错误是应用程序本身无法预料的。异常处理就是在异常引发后, 应用程序能够自动转移到相应的异常处理模块中去进行一些尝试性修复处理, 然后再决定程序走向, 使应用程序能够正常运行、或降级运行或安全地终止应用程序的执行, 以提高应用系统的可靠性。分析数据表明, 对异常的不当处理会引起系统崩溃。为开发可靠性软件系统提供了强有力的支持。Java作为一门优秀的程序设计语言不仅具有面向对象开发平台中立等点, 同时也定义了灵活的异常处理机制, Java虚拟机是这一机制的具体实施者。

2 Java异常处理机制

2.1 Java异常处理与其他语言的不同

Java不仅仅是一门编程语言, 它还是一个由一系列计算机件和规范形成的技术体系, 这个技术体系提供了完整的用软件开发和跨平台部署的支持环境, 并广泛应用于嵌入式系统、移动终端、企业服务器和大型机等各种场合。Java语言在设计上沿袭了许多C的规则。Java的异常处理语句及抛出异常语句都有相对应的C语句, 静态绑定异常处理, 没有处理的异常使用调用栈向上传播的方法。Java异常类定义比其他语言更加完善, 当动态连接类失败时, 虚拟机能够抛出Error异常类, 而一般情况Java程序不会产生该类异常, 相应也不必处理该类异常。

2.2 Java异常处理处理机制的特点

java为系统异常和普通异常提供了不同的解决方案, 编译器强制普通异常必须try..catch处理或用throws声明继续抛给上层调用方法处理, 所以普通异常也称为checked异常, 而系统异常可以处理也可以不处理, 所以, 编译器不强制用try.catch处理或用throws声明, 所以系统异常也称为unchecked异常。Runtime Exception类的异常是虚拟机在运行时产生的, 如算术运算异常数组索引异常引用异常等。java程序运行时 (非编译) 所发生的非正常情况或错误, 与现实生活中的事件很相似, 现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息, 可以用一个对象来表示, Java使用面向对象的方式来处理异常, 它把程序中发生的每个异常也都分别封装到一个对象来表示的, 该对象中包含有异常的信息。Java对异常进行了分类, 不同类型的异常分别用不同的Java类表示, 所有异常的根类为java.lang.Throwable, Throwable下面又派生了两个子类:Error和Exception, Error表示应用程序本身无法克服和恢复的一种严重问题, 程序只有死的份了, 例如内存溢出和线程死锁等系统问题。Exception表示程序还能够克服和恢复的问题, 其中又分为系统异常和普通异常, 系统异常是软件本身缺陷所导致的问题, 也就是软件开发人员考虑不周所导致的问题, 软件使用者无法克服和恢复这种问题, 但在这种问题下还可以让软件系统继续运行或者让软件死掉, 例如, 数组脚本越界 (Array Index Out Of Bounds Exception) , 空指针异常 (Null Pointer Exception) 、类转换异常 (Class Cast Exception) ;普通异常是运行环境的变化或异常所导致的问题, 是用户能够克服的问题, 例如网络断线, 硬盘空间不够, 发生这样的异常后, 程序不应该死掉。java为系统异常和普通异常提供了不同的解决方案, 编译器强制普通异常必须try..catch处理或用throws声明继续抛给上层调用方法处理, 所以普通异常也称为checked异常, 而系统异常可以处理也可以不处理, 所以, 编译器不强制用try..catch处理或用throws声明, 所以系统异常也称为unchecked异常。

3 结束语

为了提高了程序运行的可靠性, 异常处理已经被现代程序设计语言广泛采纳, 但由于Java语言自身的特点, 异常处理也给程序语言带来了一些问题, 集中表现在及时编译情况下异常处理的复杂表现, 更重要是由于字及时编译和字节码编译是分开进行的, 从而导致及时编译优化的局限, 当指令代码生成之后, 方法内部代码的优化必然涉及到字节码与机器码之间的对应关系和异常处理表的调整。在异常处理语句内部, 代码的外提与删除都有造成异常处理范围的改变的可能性。其次, 异常处理经过虚拟机的编译, 大大降低了程序的运行效率, 如果为提高运行效率删除了数组越界检查, 还会造成溢出安全漏洞。

摘要:程序设计语言有一个重要的特征就是异常处理机制, 是开发健壮程序的必要保障。讨论Java异常处理机制的实时性改造的可行性和具体方法, 并且在多个操作系统平台上测试, 实现了对开源Java虚拟机中异常处理机制的基本改造, 并且深入探讨了及时编译执行和解释执行两种情况, 异常处理机制实现与设计的主要技术。

关键词:Java,异常处理,虚拟机

参考文献

[1]王立东, 张凯.Java虚拟机分析[J]计算机工程与应用, 2002, (22) :60-63

[2]周志明.深入理解java虚拟机[M].机械工业出版社, 2011。88-92

Java异常处理分析 篇8

异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,我们就已经知道如何用if...else...来控制异常了,然而当同一个异常或者错误如果在多个地方出现,那么你每个地方都要做相同处理,相当的麻烦!Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这里的异常包括错误概念),定义异常处理的规范,在1.4版本以后增加了异常链机制,从而便于跟踪异常。

2 Java异常处理知识

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,程序代码中少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果程序中使用了语句System.out.println(11/0),那么因为是用0做了除数,所以会抛出java.lang.ArithmeticException的异常。

有些异常需要做处理,有些则不需要捕获处理。在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免、不可预测的情况则在考虑异常发生时如何处理。

Java中的异常都是用对象来表示。Java对异常的处理是按异常分类处理的,不同异常有不同的分类,每种异常都对应一个类型(class),每个异常都对应一个异常(类的)对象。异常类主要有两个来源:一是Java语言本身定义的一些基本异常类型;二是用户通过继承Exception类或者其子类自己定义的异常。Exception类及其子类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件。

异常的对象有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出,比如除数为0的异常;二是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以是Java语言中定义的,用throw关键字抛出异常,这种异常常用来向调用者汇报异常的一些信息。

Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,程序代码在catch语句块中可以捕获到这个异常并做处理;还有一部分系统生成的异常在Java运行时自动抛出。也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执行return之前执行。Java异常处理的一般结构如下:

catch语句可以有多个,用来匹配多个异常,当匹配上其中一个后,执行catch语句块时候仅仅执行匹配上的异常。catch的类型是Java语言中定义的或者程序员自己定义的,表示代码抛出异常的类型,异常的变量名表示抛出异常的对象的引用,如果catch捕获并匹配上了该异常,那么就可以直接用这个异常变量名,此时该异常变量名指向所匹配的异常,并且在catch代码块中可以直接引用。

Java异常处理的目的是提高程序的健壮性,所以可以在catch和finally代码块中给程序一个修正机会,使得程序不因异常而终止或者流程发生意外的改变。同时,通过获取Java异常信息,也为程序的开发维护提供了方便,一般通过异常信息就很快能找到出现异常的问题(代码)所在。

3 如何定义和使用异常类

在Java程序设计中我们如何定义和使用异常类呢,在此我总结了如下几种:

3.1 使用已有的异常类

假如为IOException、SQLException。伪代码如下:

3.2 自定义异常类

对于一些特殊要求的异常类,我们也可以通过创建Exception或者RuntimeException的子类得到一个自定义的异常类。例如:

3.3 使用自定义的异常

对于自定义的异常类,我们可以用throws声明方法抛出自定义的异常,并用throw语句在适当的地方抛出自定义的异常。例如:

在某种条件下抛出异常

3.4 异常转型

对于比较难懂的异常类,我们也可以通过将异常转型(也叫转译),使得异常更易读易于理解。示例如下:

4 小结

异常处理为控制具有很多动态运行时特征的复杂性程序提供了一个强大的机制。程序运行中有错误是可以预料的,但却是不可避免的。当程序出现错误时,要力争排除环境错误,继续运行程序,这就是异常处理的任务。对于Java中具体的异常处理类,这里没有一一说明,有兴趣读者可以进一步查阅相关资料。

参考文献

[1]Schildt H.Java 2参考大全[M].北京:清华大学出版社,2002:176-190.

[2]贾永庆.Java程序异常及其处理[J].武汉工程职业技术学院学报,2005,17(3):38-41.

上一篇:脑梗死患者的康复护理下一篇:9·29新政