《JAVA课程异常1.ppt》由会员分享,可在线阅读,更多相关《JAVA课程异常1.ppt(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、介绍jdk的API中文版给大家大小:20多兆类的众多子类将构成一类的众多子类将构成一个树状继承关系个树状继承关系第九章第九章异常异常异常概念程序中的错误:程序中的错误:编译错误编译错误 运行错误运行错误异常的概念:异常的概念:指程序在执行过程中出现程指程序在执行过程中出现程序本身没有预料的情况,从序本身没有预料的情况,从而导致程序错误结束而导致程序错误结束使用异常机制的目使用异常机制的目的:的:用来在发生运行异常时告用来在发生运行异常时告诉程序如何控制自身的运诉程序如何控制自身的运行,以防止错误的进一步行,以防止错误的进一步恶化恶化一、异常处理机制一、异常处理机制 Java使用异常对使用异常对
2、Java程序给出一个统一和相对简程序给出一个统一和相对简单的单的抛出抛出和和处理处理错误的机制。错误的机制。如果一个方法本身能抛出异常,当所调用的方法如果一个方法本身能抛出异常,当所调用的方法出现异常时,调用者可以出现异常时,调用者可以捕获捕获异常使之得到处理;异常使之得到处理;也可以也可以回避回避异常,这时异常将在调用的堆栈中向异常,这时异常将在调用的堆栈中向下下传递传递,直到被处理。,直到被处理。异常类异常类 在Java中,异常是一个对象,它继承自Throwable类,所有的Throwable类的子孙类所产生的对象都是异常。ObjectThrowableExceptionError 异常类
3、的继承结构异常的分类ThrowableErrorExceptionExceptionRuntimeException缺省的异常缺省的异常处理程序处理程序由用户捕获或由用户捕获或声明并处理声明并处理不做处理不做处理用户自己产生的异常用户自己产生的异常要处理要处理异常的处理程序运行时出现错误程序运行时出现错误创建异常对象创建异常对象抛出异常对象抛出异常对象捕获并处理捕获并处理Exception 类的主要方法public Exception();public Exception(String s);public String toString();public String getMessage()
4、;二、异常处理方法二、异常处理方法 异常处理的方法有两种:一种方法是使用trycatchfinally结构对异常进行捕获和处理;二种方法是通过throws和throw抛出异常。异常处理在在Java中,可以通过中,可以通过trycatchfinally结构对异常进行捕获和处理,其形式如下:结构对异常进行捕获和处理,其形式如下:try 可能出现异常的程序代码可能出现异常的程序代码catch(异常类名异常类名1 异常对象名异常对象名1)异常类名异常类名1对应的异常处理代码对应的异常处理代码catch(异常类名异常类名2 异常对象名异常对象名2)异常类名异常类名2对应的异常处理代码对应的异常处理代码
5、finally 必须执行的代码必须执行的代码 trycatchfinally结构 说明(1)将可能发生异常的程序代码放置在try程序块中。程序正常运行过程中,后面的各catch块不起任何作用。但如果该块内的代码出现了异常,系统将终止try块代码的执行,自动跳转到所发生的异常类对应的catch块中,执行该块中的代码。(2)其中的finally块是个可选项,如果包含有finally块,无论异常是否发生,finally块的代码必定执行。(3)一个try块可以对应多个catch块,用于对多个异常类进行捕获。【任务任务8-1】处理除数为处理除数为0异常异常publicpublic classclass
6、InputException1 publicpublic staticstatic voidvoid main(String args)trytry System.out.println(4/0);catchcatch(ArithmeticException e)System.out.println(算术错误:除数为0,提示信息为+e.toString();算术错误:除数为0,提示信息为java.lang.ArithmeticException:/by zero【任务任务8-2】同时处理多个异常。同时处理多个异常。publicpublic classclass ArrayException p
7、ublicpublic staticstatic voidvoid main(String args)intint x=args.length;intint a=newnew intintx;forfor(intint i=0;i=x-1;i+)ai=Integer.parseInt(argsi);intint b=1,2,3,4,0;trytryforfor(intint i=0;i5;i+)System.out.println(ai/bi);catchcatch(ArrayIndexOutOfBoundsException e1)System.out.println(异常:数组越界);ca
8、tchcatch(ArithmeticException e2)System.out.println(异常:算数错误);finallyfinallySystem.out.println(程序结束);1111异常:数组越界程序结束1111异常:算数错误程序结束抛出异常语句抛出异常语句 通通常常情情况况下下,异异常常是是由由系系统统自自动动捕捕获获的的。但但程程序序员员也也可可以以自自己己通通过过throw语语句句抛抛出出异异常。常。throw语句的格式为:语句的格式为:throw new 异常类名(信息)异常类名(信息)其其中中异异常常类类名名为为系统异常类名或或用户自定义的的异异常常类类名名,
9、“信信息息”是是可可选选信信息息。如如果果提提供供了了该该信信息息,toString()方法的的返返回回值值中中将将增加该信息内容。增加该信息内容。【任务任务8-3】抛出异常抛出异常publicpublic classclass Deposit publicpublic staticstatic doubledouble discount(intint n)ifif(n0)throwthrow newnew IllegalArgumentException(n应该为正整数);returnreturn n*0.08;publicpublic staticstatic voidvoid main(
10、String args)trytry intint i=Integer.parseInt(args0);System.out.println(用户消费+i+元,可优惠+discount(i)+元);catchcatch(ArrayIndexOutOfBoundsException e1)System.out.println(异常:没有输入参数);catchcatch(NumberFormatException e2)System.out.println(异常:参数不能转换为整型);catchcatch(IllegalArgumentException e3)System.out.println
11、(自定义异常:+e3.toString();finallyfinallySystem.out.println(程序结束);注意异常类型的捕获顺序异常:没有输入参数程序结束异常:参数不能转换为整型程序结束自定义异常:java.lang.IllegalArgumentException:n应该为正整数程序结束用户消费800元,可优惠64.0元程序结束 抛出异常选项抛出异常选项 在有些情况下,一个方法并不需要处理它所生成的异常,而在有些情况下,一个方法并不需要处理它所生成的异常,而是向上传递,由调用该方法的其他方法来捕获该异常,这时是向上传递,由调用该方法的其他方法来捕获该异常,这时就要用到就要用到
12、throws子句。子句。为了明确指出某方法不捕获某类异常,而让调用该方法的其为了明确指出某方法不捕获某类异常,而让调用该方法的其他方法捕获该类异常,可以在申明该方法的时候,使用他方法捕获该类异常,可以在申明该方法的时候,使用throws语句语句 其格式如下:其格式如下:返回类型返回类型 方法名(方法名(参数表参数表)throws 异常类型名异常类型名 声明部分声明部分 自定义异常类自定义异常类自定义异常类可以通过继承Exception类来实现。其一般形式为:class自定义异常类名 extendsException异常类体;【任务任务8-4】在程序中自定义一个异常在程序中自定义一个异常类类并使
13、用它并使用它import javax.swing.JOptionPane;class PasswdException extends Exception PasswdException()System.out.println(密码不能小于六位);public class Passwd public static int x=10000;public static boolean checkpasswd(String passwd)throws PasswdExceptionif(passwd.length()6)throw new PasswdException();else return t
14、rue;/main函数密码不能小于六位ch8.eg8_4.PasswdException程序结束密码已经设置程序结束public static void main(String args)try String passwd=JOptionPane.showInputDialog(请设置初始密码);checkpasswd(passwd);System.out.println(密码已经设置);catch(PasswdException e)System.out.println(e);finallySystem.out.println(程序结束);该任务中自己定义了一个异常如下:classPassw
15、dExceptionextendsExceptionPasswdException()System.out.println(密码不能小于六位);Exception子类的继承关系ExceptionClassNotFoundExceptionClassNotSupportedExceptionIllegalAccessExceptionInstantiationExceptionInterruptedExceptionNoSuchMethodExceptionRuntimeExceptionArithmeticExceptionArrayStoreExceptionClassCastExcepti
16、onIllegalArgumentExceptionException子类(续)IllegalThreadStateExceptionNumberFormatExceptionIllegalMonitorStateExceptionIndexOutOfBoundsExceptionArrayIndexOutOfBoundsExceptionStringIndexOutOfBoundsExceptionNegativeArraySizeExceptionNullPointerExceptionSecurityException 上机作业1设计一个java程序,有数组a()=10,20,30,40
17、,50;b()=0,2,30;求数组c()=ai/bi,i=0-4.请处理此程序所发生的任何异常(ArrayIndexOutofBoundsException)(ArithemeticException)上机作业2:使用已有的bank1类自定义异常并使用步骤1:创建异常类OverDrawnException当取出钱后余额小于10的情况。该类继承Excoption类,并覆盖该类的publicStringtoString()方法,返回提示信息“存款不能为负数”2:创建异常类DepositException当无效钱数(小于0)存入时。该类继承Excoption类,并覆盖该类的publicString
18、toString()方法,返回提示信息“存款不能为负数”3在Bank1类的booleantake(doublenum)方法中,如果发现(余额-num=10)则抛出一个OverDrawnException,并在take方法在进行捕获,捕获后打印异常的toString返回的信息4在voidsave(doublenum)方法中,发现num小于0,则抛出一个DepositException异常,并在方法头中申明take方法自身不处理该异常,由调用它的函数处理(提示:TestBank1类的main函数处理)5写一个测试程序,写代码实现下列过程:新建一个帐户,开户信息为【“001”,“张三”,“天源路78
19、9号”,200】,存入90元,再存入-90元,取款290元。捕获所有可能发生异常提示:take方法要求返回boolean值的语句应该放在catch语句的最后1关于异常的含义,下列描述正确的是A程序编译错误B 程序语法错误C 程序自定义的异常D 程序编译或者运行时发生的异常事件D2抛出异常时,应该使用哪个子句AthrowB catchC finallyD throwsA3自定义异常时,可通过对下列哪一项进行继承?AError类B Applet类C Exception类D AssertionError类C4 当方法产生该方法无法确定如何处理的异常时,应该如何处理?A申明异常B 捕获异常C 抛出异常
20、D 嵌套异常A5 对于try和catch子句的排列方式,下列哪一项是正确的?A子类异常在前,父类异常在后B 父类异常在前,子类异常在后C 只能有子类异常D 父类异常和子类异常不能同时出现在同一个类中Apublicclasstest6publicstaticvoidmain(Stringargs)method();staticvoidmethod()throwsExceptiontrySystem.out.println(test6);finallySystem.out.println(finally);6对下面程序描述正t确的是A代码编译成功,输出test和finallyB代码编译成功,输出t
21、estC代码实现选项A的功能,之后Java停止运行,抛出异常,但是不进行处理D代码不能编译通过D7关于java语言中常用的异常类的说法,错误的一个是A在不合法的数学运算发生时,会出现ArithmeticException类异常B如果字符串转换成数字,需要准备处理NumberFormatException异常C如果使用非法的索引值来访问数组,ArrayIndexOutOfBoundsException异常会被抛出D如果指针变量为空,NullPointException异常就会被抛出DJava中没有指针使用null对象引用方法或变量将产生该异常14运行下列程序,将产生什么异常?AArrayInde
22、xOutOfBoundsExceptionBNumberFormatExceptionCArithmeticExceptionDArithmeticException和ArrayIndexOutOfBoundsExceptionpublicclasstest14publicstaticvoidmain(Stringargs)intx=0;inty=2/x;intz=1,2,4,6;intp=z4;C15下列描述正确的是A在catch代码段中可以使用return语句返回到异常抛出点B异常机制可以用于流程控制Ccatch(Exceptione)可以捕获异常的任何类型D程序发生异常时,如无法进行合适
23、的异常处理,则该程序恢复正常运行C8.5习题习题一、选择题1下列描述正确的是()A)在catch代码段中可以使用return语句返回到异常抛出点B)异常机制可以用于流程控制C)catch(Exceptione)可以捕获异常的任何类型D)程序发生异常时,如无法进行合适的异常处理,则该程序恢复正常运行2关于异常的含义,下列描述正确的是()A)程序编译错误B)程序语法错误C)程序自定义的异常D)程序编译或者运行时发生的异常事件3抛出异常时,应该使用哪个子句()A)throwB)catchC)finallyD)throws4自定义异常时,可通过对下列哪一项进行继承?()A)Error类B)Applet
24、类 C)Exception类D)AssertionError类5当方法产生该方法无法确定如何处理的异常时,应该如何处理?()A)声明异常B)捕获异常C)抛出异常D)嵌套异常6对于try和catch子句的排列方式,下列哪一项是正确的?()A)子类异常在前,父类异常在后B)父类异常在前,子类异常在后C)只能有子类异常D)父类异常和子类异常不能同时出现在同一个类中二、填空题1异常类的最上层为 类,此类又有两个子类:和 。2Java在执行时期的错误处理功能,称为 。3Java由内部系统所产生的错误,称为 ,由程序本身或环境所产生的错误,称为 。4处理异常分为两种情况,捕获异常和 。三、简答题:1、为什么要有自定义异常?2、java程序中如何处理多种异常?上机作业1:综合图形界面输入学生信息后,在下面的几个文本域中分别显示学生信息的变化图形界面:JtextField不能处理TextField事件?上机作业2:实现如下菜单界面要求点【学生信息】-【输入】后可以弹出作业A的界面输入信息示例MainFrame作业3:代替中段考的大作业“猜大小”游戏(教材11章练习1或者补充资料12章课后习题6)计算器任何其他小游戏 说明:老师要当面检查运行效果,并对代码提问根据难度 和实现效果 代码熟悉程度给分15周以前(上机课时)交,过期不交 视为中段考缺考