,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,面向对象程序设计,包 异常处理,教师:张立涓,上节内容回顾,抽象类和抽象方法,接口,提问,1、,如下所示代码,抽象类可以直接生成对象么?,abstract,class Shape,abstract,void display();,class test,public static void main(String args),Shape s=new Shape();,判断下列接口实现正确与否,interface Irect,double w=3,l=4;,void compute();,void method1(int i,int j);,double method2();,class Crect implements Irect,void compute(),public double method2(int i),本节课主要内容-接口,包,异常处理,【,问题的引入,】,要开发一个系统,可能会包含很多类文件,接口文件,那么,我们如何更好的组织这些文件,更好的管理这些文件呢?,Java,中为了更好地管理类和接口,引入了“包”(,package,)的概念,将功能相关的类和接口组织在一个包内,包,包(package)是一组相关类和接口的集合或者说,是类和接口的容器,。它提供了访问权限(控制类之间的访问)和命名的管理机制(划分类名空间)。,Java中的包主要有三个作用,:,是使得功能相关的类易于查找和使用,同一包中的类和接口通常是功能相关的;,是避免了命名的冲突,不同包中的不同类可以同名;,是提供一种访问权限的控制机制,一些访问权限以包为访问范围。,使用package语句将文件打包,创建一个包,只需在定义了类和接口的源文件的,第一行,使用package,语句,例如:,package graphics;,/package是关键字,graphics是包的名字,package,语句的作用域是包含该语句的整个源文件。上例中,“,package graphics;”,语句所在的源文件中的所有类和接口都是包,graphics,的成员;,请将订票系统文件打包,目录结构如下图所示。将所有.class文件打包至domain目录下,打包后test.java文件还可以编译通过么?,使用包,import语句引用的格式:,import package1.package2.(className|*),import PackageName;,/引入PackageName包,import PackageName.Identifier;,/引入,PackageName包中的类和接口,import PackageNamae.*;,/引入PackageName包中的全部类和接口,程序演示:P145 任务4-12,Java的应用程序接口,(API),Java,的应用程序接口(,API,),是以包的形式实现的,每个包中包含大量相关的类、接口等。,java.applet,:,包含有关小应用程序的处理,java.awt,:,有关图形用户界面的工具箱,java.io,:,输入输出包,java.lang,:,语言包,:,网络包,java.util,:,实用程序包,类的访问权限,访问权限指本类中的成员可以被哪些类访问,访问权限修饰符:private(私有)、protected(保护)、public(公有),什么是异常?,在程序运行中导致程序终止运行的事件。如,,要求程序执行以零为除数的除法,,要求程序访问数组下标范围以外的数组元素,,要求访问空对象内的信息。,示例:观察该程序运行结果,public class OutputArray,public static void main(String args),int country=1,2,3,4;,for(int iLoop=0;iLoop=4;iLoop+),System.out.println(countryiLoop);,System.out.println(“输出完成”);/,没有输出代表程序非正常终止,发生异常后有怎样的后果?,程序非正常退出,运行过程数据丢失,一旦发生异常,我们希望:向用户通报异常的内容,保存用户已做的工作,让用户以适当的方式退出程序。,一个好的应用程序,除了具备用户要求的功能外,还要求能预见程序执行过程中可能产生的各种异常,并把处理异常的功能包括在用户程序中。,异常类的层次和主要子类,Java的异常处理机制,Java将异常视为对象。当Java程序执行的过程,中出现异常,将会自动产生一个异常对象,该对,象包含了该异常的相关信息。,可以编写代码处理异常,我们称之为,捕获异常。,也可以不对该异常类对象作处理,将它抛给调,用它的方法来处理,这个过程称之为,抛出异常。,Java的异常处理机制,异常处理有以下几种方式:,1)可以不处理运行时异常,由Java虚拟机自动进行处理,2)使用try-catch-finally语句,捕获异常,3)通过throws子句声明,抛出异常,try-catch结构,Java采用try-catch-finally语句块来捕获异常,具体语法格式如下:,try,/可能产生异常的语句,catch(ExceptionName1 e1),/异常处理语句,catch(ExceptionName2 e2),/异常处理语句,示例,public class OutputArray,public static void main(String args),int country=1,2,3,4;,try,for(int iLoop=0;iLoop=4;iLoop+),System.out.println(countryiLoop);,catch(ArrayIndexOutOfBoundsException e),System.out.println(发生数租越界异常);,System.out.println(“输出完成”);,/,能够输出代表程序正常终止,try-catch-finally结构,try,/可能产生异常的语句,catch(ExceptionName e),/异常处理语句,finally,/必须执行的语句,无论try语句中是否发生异常,finally语句块中的内容都会被执行,try-catch-finally结构执行次序,try,执行catch,执行finally,无异常,有异常,try-catch-finally结构的执行次序,try-catch-finally分析,try,:,将有可能出现错误的程序代码放在,try,块中,对,try,块中的程序代码进行检查,可能会抛出一个或多个异常,因此,,try,后面可跟一个或多个,catch;,catch,:,功能是捕获异常,,catch,捕获异常的过程中,要将,Throwable,类中的异常类型和,try,语句抛出的异常进行比较,若相同,则在,catch,中进行处理;,finally:,是这个组合语句的统一出口,一般用来进行一些“善后”操作,例如释放资源、关闭文件等。,练习,编程求解两个数相除的结果,并处理除数为0的异常情况,当出现异常时输出提示信息,“除数为0异常”,提示:除数为0的异常类型为 ArithmeticException,try-catch使用注意事项,(1),try,语句块后面一定要有,catch,语句块或者,finnaly,语句块。,catch,语句块或者,finally,语句块都可以省略,但是它们不能同时都省略,否则将导致编译错误。,(2)catch,语句块必须跟在,try,语句块的后面,如果有,多个,catch,语句块,它们之间是,不能有其他任何语句的。,throws语句抛出异常,(1)对于,Error,和,RuntimeException,异常,在程序中可以进行捕获和处理,但不是必须的。如果在程序中没有对它们进行处理,编译器不会检查出错误来,可以通过编译。因此这些异常称为,非检查异常,。例如,ArrayIndexOutOfBoundsException,异常,我们如果在程序中不作异常捕获编译也可以通过。,(,2,)对于其他的异常(不是,RuntimeException,及其子类的,Exception,异常),在程序中一定要对它们进行处理,要么用,try-catch,语句块捕获并处理它们,要么声明抛出异常,否则编译失败。由于编译器对这种异常进行了检查,因此这种异常也称为,检查异常,。,程序演示,P138 任务4-10,小结,包,异常处理,