《第10章异常处理.ppt》由会员分享,可在线阅读,更多相关《第10章异常处理.ppt(44页珍藏版)》请在三一文库上搜索。
1、第10章 异常处理,本章要点,了解异常的概念 掌握捕捉异常的方法 了解Java中常见的异常 掌握自定义异常的方法 了解如何在方法中抛出异常 了解运行时异常种类 了解异常处理的使用原则,第10章 异常处理,1、异常概述 2、异常分类 3、获取异常信息 4、处理异常 5、抛出异常 6、自定义异常 7、异常的使用原则,主要内容,10.1 异常概述,假设一辆轿车发生了故障,可能是某个零件发生了问题,也可能是没有油了 如果是由于零件问题,只需要更换零件就可以解决; 如果是没有油了,只需要加满油就可以正常行驶了。 程序中异常与此类似,就对程序中可能发生异常语句进行处理,使程序能够正常执行。,10.1 异常
2、概述,在程序开发过程中,可能存在各种错误,有些错误是可以必免的,而有些错误却是意想不到的,在Java中把这些可能发生的错误称为异常。 图10-1说明了异常类的继承关系。,10.1 异常概述,10.2 异常分类,10.2.1 可控式异常 10.2.2 运行时异常,10.2.1 可控式异常,在Java中把那些可以预知的错误, 例如从文件中读取数据, 对数据库进行操作等, 在程序编译时就能对程序中可能存在的错误进行处理,并给出具体的错误信息,我们把这些错误称为可控式异常。,10.2.1 可控式异常,表10-1 常见可控式异常及说明,10.2.1 可控式异常,【例10-1】 在main()方法中使用C
3、lass类的forName()方法加载一个不存在的类。,try Class.forName(“com.mysql.jdbc.Driver“); catch (ClassNotFoundException e) e.printStackTrace(); ,10.2.2 运行时异常,在Java中有些错误是不能被编译器检测到的 在进行除法运算时,除数为零; 试图把一个不是由数字组成的字符串使用Integer类的parseInt()方法转换为整数。 Java的编译器是检测不到的,因而能够正常编译,但是在运行时就会发生异常,这些异常称为运行时异常。,表10-2 常见运行时异常及说明,10.2.2 运行时
4、异常,10.2.2 运行时异常,【例10-2】 在main()方法中创建一个长度为5的数组,并为其第6个元素赋值。,int array = new int5; array5 = 6;,10.3 获取异常信息,获取异常信息就好比工厂里某个线路出现故障停电了,电工要从线路中找出现故障的原因, 找到了出现故障的原因,就象程序中获取到了异常信息。 在Java中java.lang.Throwable类是所有异常类的超类,该类提供了获得异常信息的方法。,表10-3 获取异常信息的方法及说明,10.3 获取异常信息,10.3 获取异常信息,【例10-3】 使用上述方法输出进行除0运算异常。,try int
5、z = 100 / 0; catch (Exception ex) ex.printStackTrace(); System.out.println(ex.getMessage(); System.out.println(ex.getLocalizedMessage(); System.out.println(ex.toString(); ,10.4 处理异常,10.4.1 使用try-catch处理异常 10.4.2 使用try-catch-finally处理异常 10.4.3 使用try-finally处理异常,10.4.1 使用try-catch处理异常,对于程序中可能发生异常的语句,可
6、以将其添加到try-catch语句块中,这样当程序发生异常时,就可以对其进行相应的处理。 try 需要正常执行的语句 catch(Exception ex) 对异常进行处理的语句 ,10.4.1 使用try-catch处理异常,说明: try和catch是进行异常处理的关键字; try和catch之间的大括号内是程序需要正常执行但又可能发生异常的语句; catch后的小括号内是程序需要处理的异常类型; catch后的大括号内是对程序发生的异常进行处理的语句。,int a = 6; int b = 0; try / try监控区域 if (b = 0) throw new ArithmeticE
7、xception(); System.out.println(“a/b的值是:“ + a / b); catch (ArithmeticException e) / catch捕捉异常 System.out.println(“出现异常,变量b不能为0“); System.out.println(“程序正常结束。“);,int intArray = new int3; try for (int i = 0; i = intArray.length; i+) intArrayi = i; System.out.println(intArrayi / (i - 3); catch (Arithmet
8、icException e) System.out.println(“除数为0异常。“); catch (ArrayIndexOutOfBoundsException e) System.out.println(“intArray数组下标越界异常。“); System.out.println(“程序正常结束。“);,10.4.2 使用try-catch-finally,try-catch-finally语句块的语法格式如下: try 需要执行的语句 catch(Exception ex) 对异常进行处理的语句 finally 一定会被处理的语句 ,10.4.2 使用try-catch-fina
9、lly,说明: try、catch和finally是进行异常处理关键字 try、catch后面的大小括号的作用同try-catch语句。 finally后大括号内的语句,不管程序是否发生异常都要执行,因此finally语句块通常用于执行垃圾回收、释放资源等操作。,int i = 0; String greetings = “ Hello world !“, “ Hello World ! “, “ HELLO WORLD !“ ; while (i 4) try System.out.println(greetingsi+); catch (ArrayIndexOutOfBoundsExcep
10、tion e) System.out.println(“数组下标越界异常“); finally System.out.println(“-“); ,10.4.3 使用try-finally处理异常,对于程序中可能发生异常的语句,可以将其添加到try-finally语句块中,这样当程序发生异常时,就可以在finally语句块中对其进行相应的处理, 另外当程序没有发生异常时,执行完try和finally之间的语句后,也将执行finally语句块中的代码, 因此可以在finally语句块中放置一些必须执行的代码,比如释放内存资源的代码等等。,10.4.3 使用try-finally处理异常,try-
11、finally语句块的语法格式如下: try 需要执行的语句 finally 一定会被处理的语句 ,图10-1 try、catch、finally语句块的执行,10.5 抛出异常,10.5.1 使用throws声明抛出异常 10.5.2 使用throw语句抛出异常,10.5.1 使用throws声明抛出异常,throws通常用于方法声明,当方法中可能存在异常,却不想在方法中对异常进行处理时,就可以在声明方法时使用throws声明抛出的异常,然后在调用该方法的其他方法中对异常进行处理(如使用try-catch语句或使用throws声明抛出的异常)。,10.5.1 使用throws声明抛出异常,如
12、果需要使用throws声明抛出多个异常,各异常之间要用逗号分隔。 数据类型 方法名(形参列表 ) throws 异常类1,异常类2,异常类n 方法体; ,methodname throws Exception1,Exception2,ExceptionN ,10.5.1 使用throws声明抛出异常,说明: 数据类型是基本数据类型或对象类型; 方法名是Java语言的合法标识符; throws是抛出异常的关键字; 异常类是Java的异常类或自定义异常类; 方法体是该方法需要执行的语句。,static void pop() throws NegativeArraySizeException int
13、 arr = new int-3; / 创建数组 public static void main(String args) try / try语句处理异常信息 pop(); / 调用pop()方法 catch (NegativeArraySizeException e) System.out.println(“pop()方法抛出的异常“); ,10.5.2 使用throw语句抛出异常,在通常情况下,程序发生错误时系统会自动抛出异常,而有时希望程序自行抛出异常,可以使用throw语句来实现。 throw语句通常用在方法中,在程序中自行抛出异常,使用throw语句抛出的是异常类的实例,通常与if语
14、句一起使用。,10.5.2 使用throw语句抛出异常,throw语句的语法格式如下: throw new Exception(“对异常的说明“); 其中 throw是抛出异常的关键字; Exception是异常类(通常使用自定义异常类)。,10.5.2 使用throw语句抛出异常,【例10-7】 计算圆的面积。设定圆的半径不能小于20,小于则抛出异常并给出提示信息。,ThrowDemo ex = new ThrowDemo(); try puteArea(10); / 调用方法 catch (Exception e) System.out.println(e.getMessage(); ,p
15、rivate static final double PI = 3.14; / 圆周率 public void computeArea(double r) throws Exception if (r = 20.0) / 使用throw语句抛出异常 throw new Exception(“程序异常:n半径为 :“ + r + “n半径不能小于20。“); else double circleArea = PI * r * r; / 计算圆的面积 System.out.println(“半径是“ + r + “的圆面积是:“ + circleArea); ,10.6 自定义异常,10.6.1
16、创建自定义异常类 10.6.2 使用自定义异常类,10.6.1 创建自定义异常类,创建自定义的异常类需要继承自Exception类,并提供含有一个String类型形参的构造方法,该形参就是异常的描述信息,可以通过getMessage()方法获得。例如:,public class NewException extends Exception public NewException(String s) super(s); ,10.6.2 使用自定义异常类,创建完自定义异常类,我们就可以在程序中使用自定义异常类了。 使用自定义异常类可以通过throw语句抛出异常, 接下来通过实例来说明自定义异常类的
17、使用,10.6.2 使用自定义异常类,【例10-8】 在项目中自定义异常类,然后编写测试类。 (1)编写自定义异常类NewException,该类继承自Exception类。在构造方法中,输出异常信息。 (2)编写NewExceptionTest类,在showArea()方法中抛出异常,在main()方法中处理异常。,public class NewException extends Exception private static final long serialVersionUID = -400794805034166270L public NewException(Double r)
18、System.out.println(“异常: 半径不能小于20“); System.out.println(“圆的半径为: “ + r); ,public class NewExceptionTest public static void showArea(double r) throws NewException if (r = 20) throw new NewException(r); / 抛出异常 double area = 3.14 * r * r; System.out.println(“圆的面积是:“ + area); ,public static void main(Stri
19、ng args) try showArea(10); catch (NewException ex) System.out.println(ex); ,10.7 异常的使用原则,不要过多的使用异常,这样会增加系统的负担。 在方法中使用try-catch捕获异常时,要对异常做出处理。 try-catch语句块的范围不要太大,这样不利于对异常的分析。 一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或子异常。,1.改错 public class text public static void main(String args) myMethod(); public void myMethod() throw MyException throws(new MyException); class MyException public String toString() return(“自定义异常类“); 2. 设计一个一元二次方程类,并为这个类添加异常处理。,
链接地址:https://www.31doc.com/p-2565534.html