《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:当父类
16、方法声明多个异样时,子类覆盖时只能声明多个异样的子集。例如:classFupublicvoidmethodOthrowsNullPointerException,ClassCastExceptionclassZiextendsFupubicvoidmethod()throwsNu11PointerException,ClassCastExceptionpublicvoidmethod()throwsNulIPointerException(抛出父类异样中的一部分publicvoidmethodOthrowsClassCastException/抛出父类异样中的一部分*c:当被覆盖的方法没有异样
17、声明时,子类覆盖时无法声明异样的。例如:classFupublicvoidmethod()classZiextendsFupublicvoidmethod()throwsException错误的方式*B:问题:父类中会存在下列这种状况,接口也有这种状况。接口中没有声明异样,而实现的子类覆盖方法时发生了异样,怎么办?回答:无法进行throws声明,只能CatCh的捕获。万一问题处理不了呢?CatCh中接着throw抛出,但是只能将异样转换成RuntimeException子类抛出。#14ThrOWabIe类方法*.,:常见方法*a:gclMcssage()方法返回该异样的具体信息字符串,即异样提
18、示信息*b:IoStringo方法返回该异样的名称与具体信息字符串c:PrinlStaCkTraCC()方法在限制台输出该异样的名称与具体信息字符串、异样出现的代码位置*B:案例演示异样的常用方法代码演示tryPersonp=null;if(p=nul1)thrownewNu11PointerException(出现空指针异样了,请检查对象是否为null);catch(NullPointerExceptione)Stringmessage=e.getMesagc();System.out.printIn(message);Stringresult=e.toString():System,out
19、.printIn(result);e.PrintStackTraceO:#15自定义异样*A:自定义异样的定义*a:通过阅读源码,发觉规律:每个异样中都调用了父类的构造方法,把异样描述信息传递给了父类,让父类帮我们进行异样信息的封装。* b:格式:Class异样名extendsException(或继承RuntimeExceptionpublic异样名()public异样名(Strings)super(三);*c:自定义异样继承Exception演示*d:Fl定义异样继承RuntimeException演示*B:自定义异样的练习在Person类的有参数构造方法中,进行年龄范围的推断,若年龄为负
20、数或大于200岁,则抛出NoAgeException异样,异样提示信息年龄数值非法。要求:在测试类中,调用有参数构造方法,完成Person对象创建,并进行异样的处理。* C:关于构造方法抛出异样总结构造函数究竟抛出这个NoAgeException是继承Exception呢?还是继承RuntimeException呢?*a:继承EXCCPtJon,必须要throws声明,一声明就告知调用者进行捕获,一旦问题处理了调用者的程序会接着执行。* b:继承RUntimeEXCPetiOn,不须要throws声明的,这时调用是不须要编写捕获代码的,因为调用根本就不知道有问题。一旦发生NoAgeException,调用者程序会停掉,并有jvm将信息显示到屏幕,让调用者看到问题,修正代码。