java程序设计基础与实践 第6章 异常处理

上传人:aa****6 文档编号:54865399 上传时间:2018-09-20 格式:PPT 页数:19 大小:194.50KB
返回 下载 相关 举报
java程序设计基础与实践 第6章 异常处理_第1页
第1页 / 共19页
java程序设计基础与实践 第6章 异常处理_第2页
第2页 / 共19页
java程序设计基础与实践 第6章 异常处理_第3页
第3页 / 共19页
java程序设计基础与实践 第6章 异常处理_第4页
第4页 / 共19页
java程序设计基础与实践 第6章 异常处理_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《java程序设计基础与实践 第6章 异常处理》由会员分享,可在线阅读,更多相关《java程序设计基础与实践 第6章 异常处理(19页珍藏版)》请在金锄头文库上搜索。

1、第6章 异常处理,Java异常体系结构 Java异常处理机制 Java异常的捕获、处理方法 Java自定义异常的定义、抛出方法,6.1.1 Java异常体系结构及处理机制 异常的概念异常(Exception)又称为例外,是指在程序运行过程中发生的非正常事件,如用户数据输入错误、程序代码错误、文件找不到、对空对象进行操作等错误。异常事件的发生,中断了程序的正常执行,可能带来严重的后果和损失。, Java异常体系结构 Java系统中提供了许多异常类,这些类又称为标准异常类,分布在Java.lang、Java.io、Java.util和J包中。所有的异常都是由一个称为Throwable类及其子类派生

2、出来的,其层次结构如图6.1所示。,图6.1 Java异常体系结构, ThrowableThrowable类是Java语言中所有错误或异常的超类。 Error与ExceptionError是Throwable的子类,是程序无法处理的错误。Exception类及其子类是Throwable的子类,是程序本身可以处理的异常,这种异常分运行时异常(RuntimeException)和非运行时异常两大类。 运行时异常和非运行时异常运行时异常是在Java虚拟机正常运行期间抛出的异常的超类,Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,会编译通过,因此也称之为不检查异常(Unchecked

3、 Exception)。,表6.1 常见的运行时异常,非运行时异常是RuntimeException以外的异常,也称为检查异常(Checked Exception),类型上都属于CheckedException类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过,所以一般情况下编写程序时不自定义检查异常,常见非运行时异常如表6.2所示。,表6.2 常见的非运行时异常, Java异常分类Java异常类有两个来源,一是Java语言本身定义的一些基本异常类型,二是用户通过继承Exception类或者其子类自己定义的异常。 Java异常的处理方法Java采用面向对象的方法来

4、处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法生成代表该异常的一个对象,并把它交给运行时系统,运行时系统寻找相应的代码来处理这一异常。,6.1.2 异常的捕获和处理 异常处理的基本结构在Java中,异常处理的基本结构是:try/可能出现特定异常的代码catch(异常类型 异常的变量名)/异常处理代码finally/异常发生,方法返回之前,最终执行的代码, try、catch、finally三个语句块应注意的问题 try、catch、finally三个语句块均不能单独使用,三者可以组成try.catch.finally、try.catch、try.finally三种结构,catch

5、语句可以有一个或多个,finally语句最多只有一个。 try、catch、finally三个代码块中变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些代码块的外面。 在有多个catch块的情况下,如果处理的异常类型之间具有继承关系,应该首先捕获子类异常,再捕获父类异常,例如: class TeacherString name,number;int age,num;Teacher(String name,int age)this.name=name;this.age=age;void setNumber(String number)try /异

6、常处理num=Integer.parseInt(number);catch(NumberFormatException e)System.out.println(“工号格式错误!“);int getNumber()return num;public static void main(String args)Teacher t1=new Teacher(“黎明“,28);Teacher t2=new Teacher(“张力“,30);t1.setNumber(“2a001“);t2.setNumber(“22001“);System.out.println(“工号:“+t2.getNumber(

7、); ,6.1.3 自定义异常自定义异常类可以继承Throwable类或者Exception,而不要继承Error类,自定义异常类之间也可以有继承关系。自定义异常必须使用throws声明方法可能抛出的自定义异常,并用throw语句在适当的时候抛出自定义异常。,例如: class MyException extends Exception /定义自定义异常MyException() /定义构造方法super();MyException(String s)super(s); class TeacherString name,number;int age;Teacher(String name,in

8、t age)this.name=name;this.age=age;void setNumber(String number) throws MyExceptionif(number.equals(“2a001“)throw new MyException(“自定义异常“);elsethis.number=number;String getNumber()return number;,public static void main(String args)Teacher t1=new Teacher(“黎明“,28);Teacher t2=new Teacher(“张力“,30);tryt2.

9、setNumber(“22001“);t1.setNumber(“2a001“);catch(MyException e)System.out.println(“出现自定义异常!“);finallySystem.out.println(“工号:“+t2.getNumber(); ,6.1.4 抛出异常 使用throw关键字抛出异常throw关键字是用于方法体内部,用来抛出一个Throwable类型的异常。throw语句的格式为:throw 异常类对象名; 使用throws关键字声明抛出异常当方法的调用者不能处理该异常的时候,应该将它向上传递,由调用它的方法来处理异常。throws语句的格式为:

10、方法修饰符 返回值的类型 成员方法名(形式参数表)throws 异常表/方法声明/方法体,例如: class TeacherString name,number;int age,num;Teacher(String name,int age)this.name=name;this.age=age;void setNumber(String number) throws NumberFormatException /声明要抛出的异常 if(number.equals(“2a001“)/抛出异常throw new NumberFormatException(); elsethis.number=n

11、umber;String getNumber()return number;public static void main(String args)Teacher t1=new Teacher(“黎明“,28);Teacher t2=new Teacher(“张力“,30);t1.setNumber(“2a001“); /满足异常条件,系统会抛出异常t2.setNumber(“22001“); System.out.println(t2.getNumber(); ,6.1.5 Throwable类中的常用方法,表6.3 Throwable类中的常用方法,例如: class TeacherStr

12、ing name,number;int age,num;Teacher(String name,int age)this.name=name;this.age=age;void setNumber(String number)try /异常处理num=Integer.parseInt(number);catch(NumberFormatException e)System.out.println(“使用getMessage():“+e.getMessage(); System.out.println(“使用toString():“+e.toString(); System.out.print(“使用printStackTrace:“);e.printStackTrace(); int getNumber()return num;public static void main(String args)Teacher t1=new Teacher(“黎明“,28);Teacher t2=new Teacher(“张力“,30);t2.setNumber(“22001“);System.out.println(“工号:“+t2.getNumber();t1.setNumber(“2a001“); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号