还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
异样的捕获及处理
1、课程名称异样的捕获及处理
2、学问点
2.
1、上次课程的主要学问点
1、Object类的作用;
2、链表的操作;
3、匿名内部类的定义及;
4、包装类的作用;
5、JDK
1.5新特性
2.
2、本次预料讲解的学问点
1、异样的产生及主要问题;
2、异样处理的流程;
3、异样类的组成结构以及标准的异样处理格式;
4、断言的运用;
5、自定义异样类
3、详细内容
3.
1、相识异样(重点)在程序之中异样是导致程序中断执行的一种指令流,一旦产生了异样之后,程序将立即终止执行,在最早的时候,假如要想避开异样,则须要编写大量的ifelse语句进行更加合理的推断,但是Java中引入了异样处理机制之后,对于此类问题就变的相当简洁了,但是,先来视察一下异样的产生效果public classTestDemo{public staticvoid main(String args[]){System,out.printin(=====计算起先=====);int temp=10/3;//进行除法计算System.out.printin(计算结果+temp);System,out.printin(二二二二二计算结束=二=);}}程序输出二=二计算起先二=二计算结果3=====计算结束=====现在的程序之中没有发生任何的意assert了解断言很确定的推断性的语句;断言是在JDK
1.4之后增加的一个新功能,运用assert关键字表示public classTestDemo{public staticvoid mainString args[]{int x=10;assert x==5;}}假如依据之前的方式执行程序,断言根本就没有任何的问题,因为这个时候没有启用断言检查,而要想启用的话,则干脆在java吩咐执行的时候运用一个-ea的参数即可java-ea TestDemo现在只是显示除了断言错误,却不知道详细的错误信息,此时要想知道详细的,则可以修改断言的定义格式public classTestDemopublic staticvoid mainStringargs[]{int x=10;assert x=5:x=5;}}
3.
9、自定义异样类了解Java本身已经供应了足够多的异样类的信息,但是在实际的工作开发之中,有可能依据自己的状况希望定义属于用户自己的异样类,这个时候就须要自定义异样类,而这个异样类在定义的时候就须要继承Exception类class MyExceptionextends Exception{publicMyExceptionString msg{supermsg;}}public classTestDemo{public staticvoid mainString args[]{try{thrownew MyException自己方巾着玩的e{e.printStackTrace;}}}但是这种操作一般很少会干脆使到,因为java中所供应的异样类已经足够使了,所以,这个就作为一种概念知道了即可,不用费劲琢磨
4、总结
1、各个关键字的运用;
2、Runt imeException和Exception的区分;
3、异样处理的标准格式
5、预习任务包及访问限制权限、多线程的两种实现形式、同步与死锁的概念
6、作业复习全部的代码外状况,所以最终的结果是正常的,但是下面修改一下程序public classTestDemo{public staticvoid main(Stringargs[]){System,out.printin(=====计算起先=====);inttemp=10/0;//进行除法计算System.out.printin(计算结果+temp);System.out.printin(=====计算结束=二=);})输出结果=====计算起先=====Exception inthread mainjava.lang.ArithmeticException:/by zeroatTestDemo.main(TestDemo.java:4)程序在计算处出现了异样,所以出现异样之后的代码不再执行了,即程序被中断了
3.
2、异样处理的格式(重点)假如异样出现之后没有进行合理的操作,则程序将会中断执行,则这个时候就可以通过如下的格式进行异样的处理,这样保证在程序出现异样的时候也不会中断程序try(有可能出现异样的语句}catch(异样类异样类对象){异样的处理}[catch(异样类异样类对象){异样的处理}[finally{异样处理的出口)]范例在程序中运用异样处理public classTestDemo{public staticvoidmain(Stringargs[]){System,out.printin(二二二二二计算起先=二=);try{int temp=10/0;//进行除法计算System,out.printin计算结果+temp;}catchArithmeticExceptione{System,out.printlne;System,out.printing——计算结束;}}力口入异样处理之后,程序可以正常的执行完毕,public classTestDemo{public staticvoid mainStringargs[]{System,out.printin=====计算起先=====;try{int temp=10/2;//进行除法计算System,out.printin计算结果+temp;}catch ArithmeticExceptione{e.printStackTrace;//打印异样信息最全}System.out.println——=计算结束二二二二二;}不管在何处,只要异样产生了,则异样产生之后的语句都不再执行,而且一旦有异样之后,确定要跑到相应的catch语句之中执行,假如现在没有异样,则程序可以正常的执行完毕在异样的处理语句之中,也可以加上finally,这样不管是否出现异样,则最终都会执行此操作public classTestDemo{public staticvoid mainStringargs[]{System,out.printin=====计算起先=====;try{int temp=10/0;//进行除法计算System,out.printin计算结果+temp}catch ArithmeticExcept ione){e.printStackTrace();//打印异样信息最全}finally{System.out.printin(都会执行);}System,out.printin(=====计算结束=二二);}}而且一个try语句之后可以同时捕获多种类型的异样public classTestDemo{public staticvoid mainStringargs[]{System,out.printin=====计算起先=====;try{intx=Integer.parselnt args
[0];int y=Integer,parselnt args
[1];int temp=x/y;//进彳亍除法计算System.out.printin计算结果+temp;}catch ArithmeticExceptione{e.printStackTrace;//打印异样信息最全}catchArrayIndexOutOfBoundsExceptione{e.printStackTrace;}catchNumberFormatExceptione{e.printStackTrace;}finally{System,out.printin都会执行;}System,out.printIn=====计算结束===;}}本程序有如下几种异样如果程序没有输入参数,则出现ArraylndexOutOfBoundsException假如输入的参数不是数字,则出现NumberFormatException这个程序之中现在的确处理了多个异样,但是问题也特别的明显,你如何知道一个操作会有多少种异样呢?
3.
3、异样的组织及处理结构(重点)之前已经也许的清晰了异样的产生问题及处理的格式,但是事实上在java的异样之中,包含的范围有两点程序中的异样、另外一个表示的是系统的错误,而这两点有时候为了省事,才干脆将其都统一称为异样,而Java之中的类的继承结构里面也可以发觉Throwable类,里面分为两个子类Exception表示程序中出现的代码异样,由开发人员进行处理;Error表示的是JVM的错误,程序开发人员无法处理虽然Throwable表示的范围更加的广泛,但是在实际的工作之中却很少有地方干脆运用Throwable进行异样的表示,因为其表示的范围太过于宽广,所以习惯在程序中运用Exception表示所处理的异样但是,要想充分的发挥出以上的继承关系,还须要进一步的了解异样的处理流程对于java程序来讲,假如程序中一旦出现了异样,则会由JVM自动的产生一个Exception子类的对象,之后就好比方法的参数接收那样,catch语句中的异样类型要和抛出的异样对象进行比较,假如比较胜利了,则认为当前抛出的这个异样满意与catch语句中的参数的类型,则表示可以运用此catch进行处理,而假如没有匹配的catch呢,则程序会认为此异样无法处理则交给JVM做默认的处理方式中断执行而最终不管是否产生了异样都会以finally的代码作为程序的出口既然现在已经驾驭了此过程,那么对于异样的接收就可以进一步了,因为依据面对对象的多态性来讲,全部的子类的对象都可以运用父类接收,所以在异样的处理之中,假如为了省事,可以干脆Exception接收全部产生的异样类的实例化对象但是这样一来有一个留意点,就是捕获范围广的异样确定要放在捕获范围小的异样之后public classTestDemo{public staticvoid mainStringargs[]{System,out.printin二二二二二计算起先二二二二二;try{int x=Integer,parselntargs
[0];int y二Integer,parselnt args
[1];int temp=x/y;//进行除法计算System.out.printin计算结果+temp;}catch Exceptione{e.printStackTrace;}finally{System.out.printin都会执行;}System.out.printing——计算结束二二二二二;}}以上这种简便的做法只适合于异样状况处理要求简洁的条件下,假如现在开发要求中须要将每个异样分别处理的话,则就必需采纳多个catch语句的形式了
3.
4、throws关键字重点在异样的处理之中,throws关键字主要是用于方法的声明上的,一旦在方法上运用了throws关键字之后,则表示此方法出现的异样不是由此方法自己处理,而是交给被调用处完成class MyMath{public intdivint x,int ythrows Exception{return x/y;}}public classTestDemo{public staticvoid mainStringargs[]{try{System,out.printinnewMyMath.div10,0;}catchExceptione{e.printStackTrace;}}}方法本身不再进行任何的异样处理,而是要将异样交给被调用处完成,但是此时调用处由于不确定方法中最终是否会产生异样,所以必需依据有可能产生异样的方式来进行处理当然,主方法由于本身也是方法,所以也可以接着运用throwsoclass MyMath{public intdivint x,int ythrowsException{return x/y;}}public classTestDemo{public staticvoid mainStringargs[]throws Exception{System,out.printinnew MyMath.div10,0;}}假如程序中出现了异样,则表示将交给JVM接着进行异样的处理
3.
5、throw关键字重点之前讲解过,假如程序中一旦产生了异样之后,将自动生成一个异样类的实例化对象,但是在java之中也可以自己手工的抛出一个异样,就运用throw关键字即可public classTestDemo{public staticvoidmainStringargs[]{try{throw newException自己抛着玩的;}catch Exceptione{e.printStackTrace;}}}
3.6异样处理的标准格式核心重点try.catchfinally throwthrows事实上就将构成异样处理的标准格式要求div方法在进行计算之前和之后必需有信息输出,而且一旦发生了异样之后应当交给被调用到处理class MyMath{public intdivint x,int ythrowsException{System,out.printin=========计算起先===========;int temp=0;try{temp=x/y;}catch Exceptione{throw e;//把异样向上抛}finally{System,out.print In=========计算结束===========;}return temp;}}public classTestDemo{public staticvoidmainStringargs[]{try{System,out.printin newMyMath.div10,0;}catchException e{e.printStackTrace;}}}
3.
7、RuntimeException重点将字符串变为int型数据所依靠的方法public staticint parselntStrings throwsNumberFormatExceptionpublic classTestDemo{public staticvoidmainString args[]{int x=Integer,parselnt123;System,out.printlnx;}}以上的parselnt方法上明明运用了throws关键字,但是发觉在调用的时候却可以不运用trycatch进行处理,这是为什么呢?视察NumberFormatException类的继承关系java.lang.Object java.lang.Throwable java,lang.Exception java.lang.Runt imeExceptionjava.lang.111egalArgumentException java,lang.NumberFormatException NumberFormatException是RuntimeException类的子类,而RuntimeException类的子类的异样在开发之中假如运用了throws抛出,则可以依据自己的须要随意选择是否运用trycatch处理,假如没有运用trycatch,那么一旦产生了异样之后,则就将由JVM自己进行处理了面试题请说明Exception和RuntimeException类的区分?RuntimeException是Exception的子类,表示的是运行时异样;Exception类型的异常如果抛出,则必须进行异常的处理,而RuntimeException类型的异样,可以依据自己的实际状况来确定是否处理,不处理也没有关系
3.
8、断言:。