Java程序设计姚远 电子课件 教学课件第7章 异常.ppt

Java程序设计姚远 电子课件 教学课件第7章 异常.ppt

ID:51963872

大小:719.50 KB

页数:36页

时间:2020-03-26

上传者:U-140596
Java程序设计姚远 电子课件 教学课件第7章 异常.ppt_第1页
Java程序设计姚远 电子课件 教学课件第7章 异常.ppt_第2页
Java程序设计姚远 电子课件 教学课件第7章 异常.ppt_第3页
Java程序设计姚远 电子课件 教学课件第7章 异常.ppt_第4页
Java程序设计姚远 电子课件 教学课件第7章 异常.ppt_第5页
资源描述:

《Java程序设计姚远 电子课件 教学课件第7章 异常.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

第7章异常姚远 本章目录7.1概述7.2抛出异常7.3关于异常的类型7.4异常处理结构7.5throws:异常声明7.6自定义异常 7.1概述异常情况指是在程序编写完成后的编译、测试和运行过程中所产生的不正常情况。这些不正常情况可以导致软件无法按照编码的要求正常运行下去,轻者出错退出运行,重者会造成整个系统终止运行,甚至造成计算机死机。造成异常现象的因素是多样的,其中有编码错误、数据错误、系统匹配错误等。 例:程序运行出现错误publicclassTest{staticintchu(inta){return100/a;}publicstaticvoidmain(String[]args){System.out.println(chu(10));}}但将程序中chu(10)更改为:chu(0)。此程序会出现错误,即是异常。 7.1概述现今异常作为一种编程思想,程序员可以将应用程序中可能出现错误的某类情况构造成异常,这些异常通常以自定义异常类的形式作为程序代码的一部分。将出错处理和常规处理逻辑进行分开编写,使得应用程序的可读性、健壮性大大增强、可维护性也大大提高。 7.1概述if(判断条件1){程序段1}elseif(判断条件2){程序段2}elseif(判断条件3){程序段3} 7.1概述try{}catch(是否出现情况1){程序段1}catch(是否出现情况2){程序段2}catch(是否出现情况3){程序段3} 例importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;publicclassTest{publicstaticvoidmain(String[]args){FileReaderf;try{f=newFileReader("d:\a133.txt");char[]str=newchar[100];f.read(str);}catch(FileNotFoundExceptione){System.out.println(e.getMessage());}catch(IOExceptione){System.out.println(e.getMessage());}}} 异常作为一种程序错误处理机制被广泛应用于程序中。异常情况包括:程序运行时读取的文件在磁盘上不存在,访问的数据库处于关闭状态,甚至程序员可以自定义何时为异常情况。Java提供了一些异常类,可对应于不同的异常情况。同时提供了异常处理结构便于程序员使用并处理异常。java提供的异常处理可以使应用程序的出错处理和其他程序逻辑得以有效的分开,使程序结构更为清晰。异常对象一旦产生,需要采用相应机制来处理,合理的使用异常机制来处理出错情况,可以有效地使程序避免死循环、死机、其它对操作系统的损害等。异常在程序运行期间是作为对象存在的,可以通过throw语句创建,也可以通过系统检测到错误情况发生,自动抛出异常,当异常对象产生(抛出)时,如果程序没有采取有效的异常处理结构进行处理,程序将会异常终止。 7.2抛出异常6.2.1throw抛出异常6.2.2系统抛出异常 6.2.1throw抛出异常Pro7_1:publicclasstestException{publicstaticvoidmain(String[]args){intnum=0;if(num==0)thrownewArithmeticException("除数不能为零!");System.out.println(100/num);}}运行结果:Exceptioninthread"main"java.lang.ArithmeticException:除数不能为零!attestException.main(testException.java:8)7.2.1throw抛出异常 6.2.1throw抛出异常Pro7_2:publicclasstestException{publicstaticvoidmain(String[]args){intnum=0;System.out.println(f(num));System.out.println("执行完毕!");}staticintf(inta){if(a==0)thrownewArithmeticException("除数不能为零!");return100/a;}}运行结果同样出现异常而终止。7.2.1throw抛出异常 7.2.2系统抛出异常程序运行时,如系统发现错误,系统也会根据错误类别抛出异常对象。 publicclassTest{staticintchu(inta){return100/a;}publicstaticvoidmain(String[]args){System.out.println(chu(0));}}Exceptioninthread"main"java.lang.ArithmeticException:/byzeroatTest.chu(Test.java:5)atTest.main(Test.java:9) publicclassTest{publicstaticvoidmain(String[]args){f();}staticvoidf(){inta[]=newint[10];a[10]=10;}}Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsException:10atTest.f(Test.java:10)atTest.main(Test.java:5) 6.2.1throw抛出异常Pro7_3:importjava.io.*;publicclassTest{staticintgetData(){//打开某文件…}publicstaticvoidmain(String[]args){System.out.println(getData());}}运行结果同样出现异常而终止。 7.3关于异常的类型一般某种异常情况均对应相应的异常类,这些异常类以及程序员根据自己需要自定义的异常类一般都继承自Exception。类Exception的构造方法:publicException();publicException(Strings);类Exception的两个常用方法:getMessage():返回和异常相关说明信息toString():getMessage方法的返回值更为详尽,还包括异常类的名字等。 7.4异常处理结构无论是系统抛出异常,还是程序主动抛出异常,异常对象一旦产生,程序需要进行进一步处理,而Java中可通过固定的try-catch或者try-catch-finally结构来完成。 try-catchJava语言中可通过使用try-catch来捕获一个或多个异常,基本格式为:try{语句}catch(异常错误类型名字){语句} publicclasstestException{publicstaticvoidmain(String[]args){intnum=0;try{System.out.println(100/num);System.out.println("执行完毕!");}catch(ArithmeticExceptione){System.out.println("算术异常:"+e.getMessage());}}}运行本程序,程序将正常退出,并给出运行结果提示:算术异常:/byzero publicclassTestException{staticinti=100;staticintchu(inta)throwsArithmeticException{return100/a;}publicstaticvoidmain(String[]args){try{System.out.println(chu(0));i++;}catch(ArithmeticExceptione){System.out.println("发生算术运算异常,除数不能为零!");}System.out.println(i);}}“即使一部分程序发生了问题,但仍然可以让程序按设计者思路继续执行”发生算术运算异常,除数不能为零!100 7.4.2try-catch-finallytry{语句}catch(异常错误类型名字){语句}finally{语句} publicclasstest{publicstaticvoidmain(String[]args){try{inti=newInteger("E3E4");System.out.println(i);}catch(Exceptione){System.out.println("出错了,错误为:"+e.getMessage());}finally{System.out.println("不管怎样,一定要ByeBye!");}System.out.println("我们继续做别的事情吧~");}}运行效果为:出错了,错误为:Forinputstring:"E3E4"不管怎样,一定要ByeBye!我们继续做别的事情吧~ 7.4.3关于catch匹配publicclasstestException{publicstaticvoidmain(String[]args){intnum=0;try{System.out.println(100/num);System.out.println("执行完毕!");}catch(ArithmeticExceptione){System.out.println("算术异常:"+e.getMessage());}}}运行效果为:算术异常:/byzero 7.4.4用特定异常类型代替通用异常类型publicclasstestException{publicstaticvoidmain(String[]args){intnum=0;try{if(num==0)thrownewArithmeticException("除数不能为零!");System.out.println(100/num);}catch(IOExceptione){System.out.println("算术异常:"+e.getMessage());}}}程序编译将不能通过 publicclasstwo{publicstaticvoidmain(String[]args){intnum=0;try{if(num==0)thrownewArithmeticException("除数不能为零!");System.out.println(100/num);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("异常:"+e.getMessage());}catch(ArithmeticExceptione){System.out.println("算术异常:"+e.getMessage());}}}算术异常:除数不能为零! 7.5throws:异常声明importjava.io.*;publicclasstestException{staticvoidgetI()throwsIOException{//…}publicstaticvoidmain(String[]args){getI();}}此程序编译将不能通过,因为getI方法已进行了异常声明,作为调用者,方法main应该在调用getI方法时进行相应的异常处理。换句话说,一旦方法后面声明了可能的异常。调用者必须要处理。否则编译时不能通过.编译出错:UnhandledexceptiontypeIOException publicclasstestException{voidf()throwsException{thrownewException("此为测试异常对象的提示信息!");}testException()throwsException{f();System.out.println("构造方法方法执行完毕");} publicstaticvoidmain(String[]args){try{testExceptiontestone=newtestException();}catch(Exceptione){System.out.println(e.getMessage());}}此例中直到main方法的try-catch结构才得以处理 自定义异常根据程序需要将可能出现的各种异常情况写成相应的自定义异常类。该自定义异常类须继承自Exception或者Throwable,才能成为catch子句中出现的类型 例1:要求:(1)当输入abc时,运行结果如下:发生字符串太短异常:tringTooShortException程序执行结束(2)当输入abcdef,运行结果如下:abcdef程序执行结束(3)当输入abcdefghijklmn时,运行结果如下:发生字符串太长异常:StringTooLongException importjava.io.*;publicclasstwo{staticvoidmyFunc(Strings)throwsStringTooShortException,StringTooLongException{if(s.length()>=5&&s.length()<=10)System.out.println(s);elseif(s.length()<5)thrownewStringTooShortException();elsethrownewStringTooLongException();}publicstaticvoidmain(Stringargs[])throwsIOException{InputStreamReaderin=newInputStreamReader(System.in);BufferedReaderbr=newBufferedReader(in);Stringstr=br.readLine();try{myFunc(str);}catch(StringTooShortExceptione){System.out.println("发生字符串太短异常:"+e);}catch(StringTooLongExceptione){System.out.println("发生字符串太长异常:"+e);}finally{System.out.println("程序执行结束");}}}classStringTooLongExceptionextendsException{}classStringTooShortExceptionextendsException{} 例2:要求:(1)当输入abc时,运行结果如下:abcistooshort!发生字符串太短异常:StringTooShortException程序执行结束(2)当输入abcdef,运行结果如下:abcdef程序执行结束(3)当输入abcdefghijklmn时,运行结果如下:abcdefghijklmnistoolong!发生字符串太长异常:StringTooLongException 例:异常类的编写classStringTooShortExceptionextendsException{publicStringTooShortException(Strings){System.out.println(s+"istooshort!");}} 例:异常类的编写classStringTooLongExceptionextendsException{publicStringTooLongException(Strings){System.out.println(s+"istoolong!");}} importjava.io.*;publicclassTest{staticvoidmyFunc(Strings)throwsStringTooShortException,StringTooLongException{if(s.length()>=5&&s.length()<=10)System.out.println(s);elseif(s.length()<5)thrownewStringTooShortException(s);elsethrownewStringTooLongException(s);}publicstaticvoidmain(Stringargs[])throwsIOException{InputStreamReaderin=newInputStreamReader(System.in);BufferedReaderbr=newBufferedReader(in);Stringstr=br.readLine();try{myFunc(str);}catch(StringTooShortExceptione)//捕捉字符串太短异常{System.out.println("发生字符串太短异常:"+e);}catch(StringTooLongExceptione)//捕捉字符串太长异常{System.out.println("发生字符串太长异常:"+e);}finally//程序最后执行位置{System.out.println("程序执行结束");}}}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭