您好,欢迎访问三七文档
JAVA程序员培训-10讲师:朱晓面向对象高级本章目标掌握类继承的定义及使用掌握final关键字的使用重点掌握抽象类与接口的实际应用重点掌握对象的多态性理解Object类了解内部类和匿名内部类掌握异常的捕获及处理掌握包及访问控制权限的使用异常处理在一些传统语言中,程序员要通过一些特殊的方法返回值来判断各种异常情况在java中提供异常处理机制,可以自动捕获发生的异常并处理,如数组越界,访问文件不存在,数据库错误等Java程序运行过程中所发生的异常事件可分为两类:错误(Error):JVM系统内部错误、资源耗尽等严重情况异常(Exception):其它因编程错误或偶然的外在因素导致的一般性问题,例如:对负数开平方根空指针访问试图读取不存在的文件网络连接中断产生异常举例publicclassTest8_1{publicstaticvoidmain(String[]args){Stringfriends[]={lisa,bily,kessy};for(inti=0;i4;i++){System.out.println(friends[i]);//没有friends[3]}System.out.println(\nthisistheend);}}通过编译,输出结果:lisabilykessyExceptioninthreadmainjava.lang.ArrayIndexOutOfBoundsException:3atexception.Test8_1.main(Test8_1.java:7)java异常类层次常见异常RuntimeException错误的类型转换数组下标越界空指针访问IOExeption从一个不存在的文件中读取数据越过文件结尾继续读取连接一个不存在的URL异常处理机制Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。程序员通常只能处理异常(Exception),而对错误(Error)无能为力异常处理举例(1)publicclassTest8_1{publicstaticvoidmain(String[]args){Stringfriends[]={lisa,bily,kessy};try{for(inti=0;i4;i++){System.out.println(friends[i]);}}catch(java.lang.ArrayIndexOutOfBoundsExceptione){System.out.println(indexerr);}System.out.println(\nthisistheend);}}异常处理举例(2)•程序java8_2运行结果:javajava8_2lisabilykessyindexerrthisistheend捕获异常捕获异常是通过try-catch-finally语句实现的。try{......//可能产生异常的代码}catch(ExceptionName1e){......//当产生ExceptionName1型异常时的处置措施}catch(ExceptionName2e){......//当产生ExceptionName2型异常时的处置措施}[finally{......//无条件执行的语句}]捕获异常try捕获异常的第一步是用try{…}语句块选定捕获异常的范围。catch在catch语句块中是对异常对象进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。getMessage()方法,用来得到有关异常事件的信息printStackTrace()用来跟踪异常事件发生时执行堆栈的内容。捕获异常finally语句块捕获例外的最后一步是通过finally语句为例外处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。finally语句是任选的不捕获异常时发生的情况分为两种情况如果是运行时异常(RuntimeException类及它的子类),即使没有显式的trycatch捕获,发生异常时java可以自动捕获做默认处理,但程序会终止如果是检查异常(除RuntimeException以外所有的异常),则必须显式捕获或向外抛出,否则通不过编译IOException异常处理举例(1)publicclassTest8_3{publicstaticvoidmain(String[]args){FileInputStreamin=newFileInputStream(myfile.txt);intb;b=in.read();while(b!=-1){System.out.print((char)b);b=in.read();}in.close();}}IOException异常处理举例(2)程序Test8_3编译结果:E:\ex\javacTest8_3.javaE:\ex\Test8_3.java:4:未报告的异常java.io.FileNotFoundException;必须被捕获或被声明抛出FileInputStreamin=newFileInputStream(myfile.txt);^E:\ex\Test8_3.java:6:未报告的异常java.io.IOException;必须被捕获或被声明抛出b=in.read();^E:\ex\Test8_3.java:9:未报告的异常java.io.IOException;必须被捕获或被声明抛出b=in.read();^E:\ex\Test8_3.java:11:未报告的异常java.io.IOException;必须被捕获或被声明抛出in.close();^4个错误IOException异常处理举例(3)importjava.io.*;publicclassTest8_4{publicstaticvoidmain(String[]args){try{FileInputStreamin=newFileInputStream(myfile.txt);intb;b=in.read();while(b!=-1){System.out.print((char)b);b=in.read();}in.close();}catch(IOExceptione){System.out.println(e);}finally{System.out.println(It’sok!);}}}向外抛出异常throws如果一个方法内可能会出现异常,但当前方法不明确如何处理这个异常,则可以将这个异常抛向方法的调用者格式:方法后throws异常类1,异常类2,……方法的调用者如果无法处理这个异常,可以继续向上抛出一般向外抛出的都是检查异常覆盖方法关于异常的规则覆盖的方法不能比被覆盖的方法抛出更多的异常publicclassA{//父类publicvoidmethodA()throwsIOException{……}}publicclassB1extendsTestA{publicvoidmethodA()throwsFileNotFoundException{//合法……}}publicclassB2extendsTestA{publicvoidmethodA()throwsException{//非法……}}手动抛出异常Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要需要人工创建并抛出首先要生成例外对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。IOExceptione=newIOException();throwe;可以抛弃的例外必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:thrownewString(wanttothrow);创建用户自定义异常类用户自定义的异常类必须继承现有的异常类用户自定义例外类MyException,用于描述数据取值范围错误信息:classMyExceptionextendsException{privateintidnumber;publicMyException(Stringmessage,intid){super(message);this.idnumber=id;}publicintgetId(){returnidnumber;}}使用用户自定义异常类publicclassTest8_6{publicvoidregist(intnum)throwsMyException{if(num0){thrownewMyException(人数为负值,不合理,3);System.out.println(登记人数+num);}}publicvoidmanager(){try{regist(100);}catch(MyExceptione){System.out.print(登记失败,出错种类+e.getId());}System.out.print(本次登记操作结束);}publicstaticvoidmain(Stringargs[]){Test8_6t=newTest8_6();t.manager();}}单子设计模式SingletonpublicclassTestSingleton{publicstaticvoidmain(String[]args){Singletons1=Singleton.getInstance();Singletons2=Singleton.getInstance();System.out.println(s1==s2);}}classSingleton{privatestaticSingletons=newSingleton();privateSingleton(){}publicstaticSingletongetInstance(){returns;}}本章重点•掌握比较常用的几种异常类•异常的捕获及处理•区别throw与throws•自定义异常定义及使用
本文标题:JAVA程序员10
链接地址:https://www.777doc.com/doc-3805500 .html