Java面向对象程序设计第07章-内部类、异常类、枚举类_第1页
Java面向对象程序设计第07章-内部类、异常类、枚举类_第2页
Java面向对象程序设计第07章-内部类、异常类、枚举类_第3页
Java面向对象程序设计第07章-内部类、异常类、枚举类_第4页
Java面向对象程序设计第07章-内部类、异常类、枚举类_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章

内部类、异常类、枚举类2本章主要内容7.1内部类7.2匿名类7.3异常类7.4断言7.5枚举类难点:匿名类、异常类7.1内部类〔InnerClass〕内部类:在一个类的内部声明的类包含内部类的类称为外部类(OuterClass)3classOuterClass{成员变量;方法〔〕{}classInnerClass{……}}7.1内部类〔InnerClass〕外部类的修饰符:〔回忆〕public/默认abstract/final内部类的修饰符:public/protected/默认/privateabstract/finalstatic内部类的分类:普通内部类匿名内部类静态内部类47.1.1普通内部类的使用为何verify()可以访问breed?因为非静态内部类的对象里,保存了一个它存放的外部类对象的引用〔Cow.this〕。当调用非静态内部类的实例方法时,必须有一个非静态内部类实例,非静态内部类实例必须存放于外部类实例。6cowmain栈区breedtaillengthCow.this77.1.1普通内部类的编译7.1.2静态内部类用static声明的内部类为静态内部类静态内部类属于外部类本身,而不属于外部类某个实例87.1.2静态内部类对象使用静态内部类对象时,不需要和外部类实例绑定而非静态内部类那么不同,需要先生成外部类实例97.2匿名类如果一个类只需要创立一个对象,那么可以使用匿名类〔本课程中,在图形用户界面时使用比较多〕假设已经存在一个父类、抽象类或者接口如果想创立一个子类对象或实现接口的类之对象而且这个对象只创立一次就可以使用匿名类!匿名类对象的应用:1.和子类有关的匿名类2.和接口有关的匿名类1011子类相关:上转型和父类有关的匿名类board.showMessage(printer);参数是上转型对象12完成三件事:1、创立一个Printer的子类,该子类为匿名类2、改写Printer中的方法print()3、返回该子类的引用,作为shouMessage的参数。因此,本段代码整体是一个语句。使用匿名类,实质是产生一个子类对象!7.2.2和接口有关的匿名类13内部类访问权限〔总结〕非静态成员必须在外部类对象存在的情况下使用非静态内部类可以访问外部类的所有成员,包括private成员外部类之外访问内部类时需要注意权限修饰符的限制,这点和类成员一样外部类访问内部类的成员需要创立内部类的对象,之后可以访问内部类的任何成员,包括private成员,需要注意的是普通内部类不可以有静态成员当外部类的成员和内部类的成员重名时,仅用this是区分不了的。在内部类中访问外部类的成员时可以用如下语法区分:<外部类类名>.this.<外部类成员>;内部类定义在方法中称为局部内部类,只在局部有效147.3异常类异常(Exception)是正常程序流程所不能处理或没有处理的异常情况或异常事件15没有处理错误的程序:ReadFile{Openthefile;GotSizeOftheFile;AllocateMemory;

ClosetheFile;}7.3用异常处理错误16正常业务逻辑异常处理7.3关于异常处理异常处理已经成为一门语言是否成熟的标准之一使用异常处理的好处:1.使得代码结构更加清晰,增加可读性2.提高程序的容错性和健壮性产生异常的代码并不具有语法错误,但往往在程序执行过程中会导致程序意外终结“万物皆对象”——异常也不例外异常类有严格的继承关系,程序中碰到的每个异常都是一个对象177.3.1异常体系结构所有异常类型都是内置类Throwable的子类与JVM相关的问题,如系统崩溃,虚拟机错误,内存空间缺乏,方法调用栈溢出等用于用户程序可能捕获的异常。应尽可能在代码中处理这种异常。7.3.1异常的分类Exception分为两种:Checked异常〔在编译阶段需要被处理的异常〕。JVM会强制程序处理Checked异常〔Eclipse有所提示〕Runtime异常〔在程序执行阶段出现的异常〕。代码中应该尽可能处理这些异常,JVM本身不提示处理19RuntimeException运行异常类算术异常ArithmeticException:除数为0空指针异常NullPointerExceptioninta[]=null;a[0]=1;//对空数组中的元素进行操作Stringstr=null;str.length() //调用空对象的方法类型强制转换异常ClassCastExceptionObjectobj=newObject();Stringstr=(String)obj;RuntimeException运行异常类负数组长度异常NegativeArraySizeException inta[]=newint[-1];数组下标越界异常ArrayIndexOutOfBoundsExceptioninta[]=newint[1];a[1]=1;字符串序号越界异常StringIndexOutOfBoundsException"abc".charAt(-1)数值格式异常NumberFormatExceptionintj=Integer.parseInt("abc");由五个关键字try、catch、throw、throws和finally处理。Java中可用于处理异常的两种方式:自行处理:可能引发异常的语句封入在try块内,而处理异常的相应语句那么封入在catch块内。回避异常:在方法声明中包含throws子句,通知潜在调用者,如果发生了异常,必须由调用者处理。7.3.2异常处理模型捕获处理异常捕获并处理异常:trycatchtry{//接受监视的程序块,

//发生异常由catch中指定的程序处理}catch(ExceptionSubClass1e){//处理异常}catch(ExceptionSubClass2e){//处理异常}23无论是否有异常被抛出,都会执行,finally程序块一般作为异常处理的统一出口try{//常规代码}catch(….){//异常处理}finally{//无论发生什么异常〔或者不发生任何异常〕//都要执行}24finally在处理文件时非常有用捕获处理异常多个catch块单个代码片段可能会引起多个错误。可提供多个catch块分别处理各种异常类型。...try{}catch(ArrayIndexOutOfBoundsExceptione){}catch(Exceptione){}...ArrayIndexOutOfBoundsException类为Exception类的子类,如果捕获到这种异常,将执行第一个catch块,不会执行第二个catch块。

但是,二者位置不可颠倒。Catch的是某一个异常类所创立的对象。多个catch块例如classCatch22{

publicstaticvoidmain(Stringargs[]){

try{ Stringnum=args[0];

intnumValue=Integer.parseInt(num); System.out.println("平方为"+numValue*numValue);

}

catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("未提供任何参数!");

}

catch(NumberFormatExceptione) { System.out.println("不是数字!");

} }}

输出结果可以发现,try语句块中,如果某条语句产生异常,该try语句块内后续的语句将会被终止执行。课堂练习例:编写Java程序,包含三种异常算术异常,字符串越界,数组越界观察输出信息:每个异常对象可以直接给出信息4.3捕获异常classfirst_exception{ publicstaticvoidmain(Stringargs[]) {charc;inta,b=0;int[]array=newint[7];Strings="Hello";}}

try{a=1/b;}catch(ArithmeticExceptionae){System.out.println(“Catch“+ae);}try{array[8]=0;}catch(ArrayIndexOutOfBoundsExceptionai)(“Catch“+ai);} try{c=s.charAt(8))}catch(StringIndexOutOfBoundsExceptionse){System.out.println(“Catch“+se);}抛出异常1.程序自动抛出异常29执行该语句会抛出一个异常对象:newNumberFormatException()抛出异常2.通过throw关键字抛出异常throw语句每次只能抛出一个异常实例throw语句必须写在方法体内30抛出异常3.通过throws语句抛出异常如果一个方法可能导致一个异常但不想处理它,此时要求在方法声明中包含throws子句,通知潜在调用者,如果发生了异常,由调用者处理一个throws子句列举了一个方法可能引发的所有异常类型。31用户自定义异常用户定义的异常通常用try-catch捕获,但必须由用户自己抛出thrownewException用户定义的异常类必须继承自Throwable或者Exception,建议用Exception327.3.3输出相关异常public

classExceptionMethods{public

static

voidmain(String[]args){

try{throw

newException("Here'smyException");}catch(Exceptione){System.out.println("CaughtException"); System.out.println("e.getMessage():"+e.getMessage());System.out.println("e.toString():"+e.toString());System.out.println("e.printStackTrace():");

e.printStackTrace(); } }}33异常跟踪栈异常对象的printStackTrace()方法用于打印异常的跟踪栈信息,根据其输出可以找到异常源头347.4断言Java1.4以后引入断言机制主要用于监视代码的执行状态两种格式:assertbooleanExperession;如果booleanExperession为真,继续执行,否那么在此处停止执行assertbooleanExperession:messageExpression如果booleanExperession为真,继续执行,否那么在此处停止执行,并输出mess

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论