《java程序错误类型及异常处理.docx》由会员分享,可在线阅读,更多相关《java程序错误类型及异常处理.docx(25页珍藏版)》请在优知文库上搜索。
1、一、程序的错误类型在程序设计中,无论规模是大是小,错误总是难免的。程序的设计很少有能够一次完成,没方错误的(不是指HelIOWorki这样的程序,而是要实现确定的功能,具备确定好用价值的程序),在编程的过程中由于种种缘由,总会出现这样或那样的错误,这些程序的错误就是我们常说的“Bug”,而检测并修正这些错误的方法就是“DebugW(调试)。必本上全部的集成开发环境都供应了强大的和程序调试功能,在程序进行编译,连接,运行时,会对程序中错误进行诊断C程序的错误可以抽象分为三类:语法错误、运行错误和逻辑错误.1、语法借误是指由于编程中输入不符合语法规则而产生的。程序儡译&t不过,程序不能运行起来。此
2、类情误,傅洁,词就起来比较倚洁例如:表达式不完整、缺少必要的标点符号、关键字输入错误、数据类型不匹配、循环语句或选择语句的关键字不匹配等。通常,编译器对程序进行编译的过程中,会把检测到的语法错误以提示的方式列举出来,又称为编译错误。语法错误的调试,则可以由集成开发环境供应的调试功能来实现,在程序进行编译时,编译器会对程序中的语法错误进行诊断。编译诊断的语法错误分为3中:致命错误、错误和警告。(1)致命错误:这个错误大多是编译程序内部发生的错误,发生这类错误时,编译被迫中止,只能取新启动编译程序,但是这类错误很少发生,为了平安,编译前最好还是先保存程序。(2)错误:这个错误通常是在编译时,语法不
3、当所引起的。例如:括号不匹配,变地未声明等。产生这类错误时,编译程序会出现报错提示,我们依据提示对源程序进行修改即可。这类错误是出现最多的。(3)警告:是指被编译程序怀疑有错,但是不确定,存时可强行通过。例如:没有加void声明的主函数没有返回值,double数据被转换为float类型等。这些瞥告中花些会导致错误,有些可以通过。相规解决方法:此类错误般程序编译系统会自动提示相应的错误地点和错误缘由,比如哪一行代码少了个括号等诸如此类的提示,常见的错误,看懂干脆改正即可,假如是看不懂缘由,可以耨错误提示信息输入搜d引擎杳找一下,一般都能找到具体的解决方法。或者有些编程平台会本身供应个本地或者在线
4、的信息库,供应具体的错误缘由和解决方法,比如微软的.NET开发平台。2、运行倩旗指程序在运行过程中出现的错误。程序通过语谢t误检测,但是运行的时候出现储谀,导致程序被通终止,此类借误有特定的发生条件,因此能够精确的定位借误代潜段,因而说试也比较便利例如:除法运算时除数为。、数组下标越界、文件打不开、做盘空间不够、数据库连接错误等。此类错误发生时,编译平台一般也会提示相应的信息,对于常规的错误会有比较精确地提示,但.有时提示的错误缘由会比较模糊,但因为此类错误一般在程序运行时,只在特定的条件下才会发生,所以依据错误发生的条件,能够大致推断程序出错的代码段,结合错误的缘由,也能比较便利的调试出错误
5、。3、逻辑懵误程序运行后,没方得到设计者预期的结果,这就说明程序存在逻辑错误。这种错误在语法上是有效的,但是在逻辑上是错误的C程序运行了,也没有出借,但是执行出来的结果不是用户想要的,分为两种伏况:A、能够看出借误:比如查诲工贵大于5000的人员名单,却出现了3000的;反者不出借误,直到因缘际会发觉程序确定出借了,后果侵产侵:比如进行一个符合大型运算,把某个窃蜡人借了,最终的结果人工无法推断对储,又以该结果进行其它的运算等等,量终发觉借了误差过大,就得从头持IHt误e例如:运用r不正确的变盘,指令的次序错误,循环的条件不正确,程序设计的算法考虑不周全等C通常,逻辑错误也会附带产生运行错误。在
6、一般状况下,编译器在编译程序时,不能检测到程序中的逻辑错误,也不会产生逻辑错误的提示,因此逻辑错误比较难解除,须要程序员细致的分析程序,并借助集成开发环境供应的调试工具,才能找到出借的缘由,并解除错误。二、java的异样处理(错误处理)程序的错误就是通常的异样,也叫Exception.对于语法错误,java编译系统在编就能发觉检行出错误。对干逻辑错误,编译系统是无法发觉错误的,错误须要人为去发觉解除错误。对于运行错误,Java语言中代表异样时,运用个特地的类来代表种特定的异样状况,在系统中传递的异样状况就是该类的对象,全部代表异样的类蛆成的体系就是Java语言中的异样类体系。】、java异样类
7、Java的异样是一个对象,全部的异样都干脆或间接地继承ThroWabIe类。Throwable类的继承层次结构如下:JavaAPI中,声明白儿百个EXCePtiOn的子类分别来代表各种各样的常见异样状况,这些类依据须要代表的状况位于不同的包中,这些类的类名均以EXCCPtion作为类名的后缀。假如遇到的异样状况,JaVaAPI中没有对应的异样类进行代表,也可以声明新的异样类来代表特定的状况。在这些异样类中,依据是否是程序自身导致的异样,将全部的异样类分为两种:a) RuntimeException与其全部子类该类异样属于程序运行时异样,也就是由于程序自身的问题导致产生的异样,例如数组卜.标越界
8、异样ArraylndexoutofBoundsException等。该类异样在语法上不强制程序员必需处理,即使不处理这样的异样也不会出现语法错误。b) 其它Exception子类该类异样属于程序外部的问题引起的异样,也就是由于程序运行时某些外部问题导致产生的异样,例如文件不存在异样等。该类异样在语法上强制程序员必需进行处理,假如不进行处理则会出现语法错误。熟识异样类的分类,将有助于后续语法中的处理,也使得在运用异样类时可以选择恰当的异样类类型。2、常见的error类用途异样类名1.inkageError动态链接失败VirtUalMaChineErrOr虚拟机错误AWTErrorAWT错误3、常
9、见运行时异样类异样类名用途ArithmeticExccption数学运算异样,比如除数为零的异样IndexOutOfBoundsException下标越界异样,比如集合、数组等ArraylndexoutofBoundsExccption访问数组元素的下标越界异样StringlndexoutofBoundsExccption字符串下标越界异样ClasscascExccption类强制转换异样NullpointcrExccption当程序试图访问一个空数组中的元素,或访问一个空对象中的方法或变地时产生的异样。4、常用的非运行时异样异样类名用途ClassNotFoundException指定类或接口
10、不存在的异样IllegalAccessException非法访问异样Ioexception输入输出异样找不到指定文件的异样ProtocolException网络协议异样SocketExceptionSoCket操作异样MalformedUR1.Exception统一资源定位符(UR1.)的格式不正确的异样5、JaVa的异样处理机制描述如下:在一个方法的运行过程中,假如发生了异样,则这个方法(或者是JaVa虚拟机)生成一个代表该异样的对象(它包含了异样的具体信息),并把它交给运行时系统,运行时系统找寻相应的代码来处理这一异样。我们把生成异样对象并把它提交给运行时系统的过程称为抛出(throwl个
11、鼻祥,运行时系统找寻相应的代码来处理这一异样,系统在方法的调用栈中杳找,从产生异样的方法起先进行回朔,沿着被调用的依次往前找d,直到找到包含相应异样处理的方法为止。其过程如图10-1所示。这一过程称为捕获(CatCh)一个异样。如该异样未进行胜利捕获,则程J字将终止运行C5、界的!获和处理格式:try正常程序段,可能抛出异样;CatCh(异样类1异样变显)捕获异样类1有关的处理程序段;CatCh(异样类2异样变量)(捕获异样类2有关的处理程序段;finally确定会运行的程序代码;1try块一捕获异样:用于监控可能发生异样的程序代码块是否发生异样,假如发生界样,Try代码块将抛出异样类所产生的
12、对象并立即结束执行,而转向异样处理CatCh部分。对于系统产生的异样或程序块中未用try监控所产生的一场,将一律由java编译系统自动将异样对象抛出。1CatCh块处理异样:抛出的异样对象假如属于Cateh内所定义的异样类,则catch会捕获该异样,并进入catch中的对应代码段接着运行程序,假如异样对象不属于CatCh中所定义的异样类,则进入finally块接着运行程序。CatCh包括两个参数:个是类名,指出捕获的异样类型,必需使ThroWable类的子类;一个是参数名,用来引用被捕获的对象。Catch块所捕获的对象并不须要与它的参数类型精确匹配,它可以捕获参数中指出的异样类的对象与其全部子
13、类的对象1finally块最终处理:无论是否发生异样都会执行的语句块。比如执行关闭打开的文件、删除临时文件,关闭数据库连接等操作C曾*1CatCh可以有多个,try和finally只能有一个1try后百必务要跟Catch、finally其中的一个,印但一个try、catch、如皿过语句只能省略8tch、finalW中的一个。定义多个CatCh可精确地定位java异样。假如为子类的异样定义了特殊的CatCh块,而父类的异样则放在另外一个CatCh块中,此时,必需满意以卜.规则:子类异样的处理块必需在父类异样处理块的前面,否则会发生编译错误。所以,越特殊的异样越在前面处理,越普遍的异样越在后面处理
14、。这类似于制订防火堵的规则次序:较特殊的规则在前,较一般的规则在后。异样类常用方法常用非法用途VoidStringgetMessage()返Pl异样对象的一个简短描述VoidStringtoString()获得异样对象的具体信息VoidPrintStackTraceO在限制台上打印异样对象和它的追踪信息6、D数学运算异样classMathException;publicstaticvoidmain(Stringargs11)inta=5,b=;intc=ab;除数为O,出现异样System.out.print(c);在吩咐提示符下运行该程序,可以发觉编译正常,但是执行时出现错误的提示如下:Ex
15、ceptioninthreadmainjava.lang.ArithmcticException:/byzeroatMathExccption.main(MathException.java:4)翻译过来就是:在类java.IangArithmeticException主线程中main”方法中出现异样:除数为零,(MathExceptionJavaM此处指MathEXCePtiOrI类中的第四行”)这是一个典型的运行错误,程序告知了一卜几个信息;1出错的类:MathException1出错的代码:MathExceptionjava:4因为编译系统给出r出错的缘由和出错类的位置,可以便利地进行代码调试。2)捕获数学运算异样的处理publicClassTryCatchDemoIpublicstaticvoidmain(Stringargs)tryinta=8,b=0;intc=ab;System.out.print(c);/ArithmeticException是异样类的名称,e是引用的参数名称catch(ArithmeticExceptione)SyStem.out.pr