《Java异常笔记.docx》由会员分享,可在线阅读,更多相关《Java异常笔记.docx(12页珍藏版)》请在优知文库上搜索。
1、Java异样笔记A:异样的概述*a:什么是异样*Java代码在运行时期发生的问题就是异样。*b:异样类*在Java中,把异样信息封装成了一个类。*当出现了问题时,就会创建异样类对象并抛出异样相关的信息(如异样出现的位置、缘由等)。*c:我们见过的异样:数组角标越界异样ArrayIndexutOfBoundsException,空指针异样Nu11PointerException8ttS02异样的接着体系和错误的区分*A:异样的继承体系ThrOWable:它是全部错误与异样的超类(祖宗类)I-Error错误-Exception编译期异样,进行编译JAVA程序时出现的问题I-RuntimeExcep
2、tion运行期异样,JAVA程序运行过程中出现的问题*B:异样与错误的区分*a:异样*指程序在编译、运行期间发生了某种异样(XxxException)我们可以对异样进行具体的处理。*若不处理异样,程序将会结束运行。*案例演示:publicstaticvoidmain(Stringargs)intarr=newint3;System,out.printin(arrO);System.out.rintln(arr3);该句运行时发生了数组索引越界异常ArraylndCXOUtorBoUndSEXCePtiOn,/由于没有处理异样,导致程序无法接着执行,程序结束。System.out.printIn
3、(over);/由于上面代码发生了异样,此句代码不会执行*b:错误*指程序在运行期间发生了某种错误(XXXError),Error错误通常没有具体的处理方式,程序将会结束运行。* Error错误的发生往往都是系统级别的问题,都是jvm所在系统发生的,并反馈给jvm的。* 我们无法针对处理,只能修正代码。* 案例演示:publicstaticvoidmain(Stringargs)intarr=newint1024*1024*100;该句运行时发生了内存溢出错误OutOfMenioryError,开拓了过大的数组空间,导致JVM在安排数组空间时超出了JVM内存空间,干脆发生错误。#03异样对象的
4、产生缘由和处理方式*A:异样对象的产生缘由*案例代码:*工具类ClaSSArrayTools对给定的数组通过给定的角标获得元素。publicstaticintgetElement(intarr,intindex)intelement=arrindex;returnelement;*测试类classExceptionDc11o2publicstaticvoidmain(Stringargs)(intarr=34,12,67;intnum=ArrayTools.getElement(arr,4)System,out.printIn(num=+num):System.out.printIn(over
5、);*缘由分析:* a:由于没找到4索引,导致运行时发生了异样。这个异样JVM相识:rrayIndexOutOfBoundsExceptiono这个异样Java本身有描述:异样的名称、异样的内容、异样的产生位置。java将这些信息直接封装到异常对象中。newArraylndexOutOfBoundsException(4);*b:thrownewArrayIndeXoUtOfBOUndSEXCePtiOn(4);产生异样对象。JVV将产生的异样抛给调用者main。方法。* c:main。方法接收到了数组索引越界异样对象。由于main()方法并没有进行处理异样,main。方法就会接着把异样抛给调
6、用者JVV。当JVM收到异样后,将异样对象中的名称、异样内容、位置都显示在就限制台上。同时让程序立即终止。*B:异样的处理方式*a:JVM的默认处理方式*把异样的名称,缘由,位置等信息输出在限制台,同时会结束程序。* 一旦有异样发生,其后来的代码不能接着执行。* b:解决程序中异样的手动方式*a):编写处理代码try.catch.finally*b):抛出throws方法内部抛出对象throw关键字在java中,供应了一个throw关键字,它用来抛出一个指定的异样对象。*A:什么时候运用throw关键字?*当调用方法运用接受到的参数时,首先须要先对参数数据进行合法的推断,数据若不合法,就应当告
7、知调用者,传递合法的数据进来。这时须要运用抛出异样的方式来告知调用者。* B:运用throw关键字具体操作*a:创建一个异样对象。封装一些提示信息(信息可以自己编写)。* b:通过关键字throw将这个异样对象告知给调用者。throw异样对象:throw用在方法内,用来抛出一个异样对象,将这个异样对象传递到调用者处,并结束当前方法的执行。* C:throw关键字运用格式*thrownew异样类名(参数);*例如:thrownewNulIPointerException(要访问的arr数组不存在;thrownewArrayIndexOulOfBoundsException(该索引在数组中不存在,
8、已超出范围);*D:案例演示*throw的运用用#05方法声明异样关键字throws*:声明*将问题标识出来,报告给调用者。假如方法内通过thro琳抛出了编译时异样,而没有捕获处理(稍后讲解该方式),那么必需通过throws进行声明,让调用者去处理。*B:声明异样格式*修饰符返回值类型方法名(参数)throws异样类名1,异样类名2*C:留意事项:* throws用于进行异样类的声明,若该方法可能有多种异样状况产生,那么在throws后面可以写多个异样类,用逗号隔开。* D:代码演示:*多个异样的处理W06try.catch异样处理*A:捕获*Java中对异样有针对性的语句进行捕获,可以对出现
9、的异样进行指定方式的处理*B:捕获异样格式try/须要被检测的语句。 CatCh(异样类变量)参数。异样的处理语句。 finally肯定会被执行的语句。 *C:格式说明*a:try*该代码块中编写可能产生异样的代码。*b:catch*用来进行某种异样的捕获,实现对捕获到的异样进行处理。*c:finally:* 有一些特定的代码无论异样是否发生,都须要执行。* 另外,因为异样会引发程序跳转,导致有些语句执行不到。* 而finally就是解决这个问题的,在finally代码块中存放的代码都是肯定会被执行的。*d:Uy.catch.处理掉异样后,程序可以接着执行*D:案例演示*捕获异样格式#07多C
10、atCh处理*A:一个try多个catch组合*对代码进行异样检测,并对检测的异样传递给CatCh处理。对每种异样信息进行不同的捕获处理。*B:多catch处理的格式voidshow()不用throwstrythrownewEXCePliOn();产生异样,干脆捕获处理catch(XxxExceptione)处理方式catch(YyyExceptione)处理方式catch(ZzzExceptione)处理方式留意事项:在捕获异样处理中,变量也是有作用域的,如可以定义多个CHICh中异样变量名为Co浙#08多catch处理细微环节*A:细微环节:多个catch小括号中,写的是异样类的类名,有没
11、有依次的概念?*有依次关系。*B:平级异样:*抛出的异样类之间,没有继承关系,没有依次NullPointerExceptionextendsRuntimeExceptionNosuchElementExceptionextendsRuntimeExceptionArrayIndexOutOfBoundsExceptionextendsIndexOutOfBoundsExceptionextendsRuntimeException*C:上下级关系的异样*越高级的父类,越写在下面Nu11PointerExceptionextendsRuntimeExceptionextendsException#
12、09finalIy代码块*:finalIy的特点*被finally限制的语句体肯定会执行*B:finally的作用*finalIy,无论程序是否有异样出现,程序必需执行释放资源在如:IO流操作和数据库操作中会见到WlO调用抛出异样方法try和throws处理方式*:在实际开发中运用哪种异样处理方式呢?*能自己处理的尽量自己处理。(建议用try.catch)#11运行时期异样的特点*A:运行时期异样的概述:*RuntimeExceplion和他的全部子类异样,都屈于运行时期异样。NulIPointcrException,ArrayTndexOutOfBoundsException等都属于运行时期
13、异样.*B:运行时期异样的特点*a:方法中抛出运行时期异样,方法定义中无需throws声明,调用者也无需处理此异样。*b:运行时期异样一旦发生,须要程序人员修改源代码。设计缘由:运行异样,不能发生,但是假如发生了,程序人员停止程序修改源代码运行异样:一旦发生,不要处理,请你修改源代码,运行异样一旦发生,后面的代码没有执行的意义mi2运行异样的案例*A:计算圆的面积案例定义方法,计算圆形的面积传递参数0,或者负数,计算的时候没有问题但是,违反了真实状况参数小于=0,停止程序,不要在计弊了*B:数组索引越界案例运用数组中不存在的索引publicclassRuntimeExceptionDcmopu
14、blicstaticvoidmain(Stringargs)doubled=getrea(l);System.out.println(d):*定义方法,计算圆形的面积*传递参数0,或者负数,计算的时候没有问题*但是,违反了真实状况*参数小于=0,停止程序,不要在计算了*/publicstaticdoublegetrea(doubleif(r=O)r)thrownewRUniimCEXCCPIiOn(圆形不存在);returnr*r*Math.PI:publicstaticvoidfundionOintarr=1,2,3);对数组的5索引进行推断,假如5索引大于100,请将5索引上的数据/2,否
15、则除以3索引根本就没有if(arr5100)arr5=arr5/2;elsearr5=arr53;mi3方法重写时候异样的处理*A:方法重写时候异样的处理*a:子类覆盖父类方法时,假如父类的方法声明异样,子类只能声明父类异样或者该异样的子类,或者不声明。例如:classFU(publicvoidmethodOthrowsRuntimeExceptionclassZiextendsFupublicvoidmethodOthrowsRuntimeException/抛出父类一样的异样“publicvoidmethod()throwsNullPointerException抛出父类子异样*b:当父类方法声明多个异样时,子类覆盖时只能声明多