1、单元 12 自定义异常处理单元目标 掌握自定义异常的创建和实现抛出的方法; 掌握 throw 的方法使用; 掌握 throws 方法使用; 理解 throws 和 throw 的区别;学习任务1.任务描述在数学计算或数字分析中, 经常会用到计算两个数的最大公约数的问题。 即:输入两个正整数,当两个数字有一个不是正整数时会产生异常。当输入非整数数字时,也产生异常。输入无错误后,可计算两个数的最大公约数。2.运行结果请输入数字 m:4请输入数字 n:264 和 26 的最大公约数 2数字-12 或 22 不是正整数知识准备12.1 自定义异常JAVA 内置的异常能够处理大多数常见的运行时错误,但也
2、可以自己定义,自定义异常通常重载 Exception 构造方法来得到。 创建自定义异常是为了表示应创建自定义异常是为了表示应用程序的一些错误类型,为代码可能发生的一个或多个问题提供新含义。用程序的一些错误类型,为代码可能发生的一个或多个问题提供新含义。如果Java 提供的系统异常类型不能满足程序设计的需求,我们可以设计自己的异常类型。用户定义的异常类型必须是 Throwable 的直接或间接子类。Java 推荐用户的异常类型以 Exception 为直接父类。创建用户异常的格式如下:class 异常类名异常类名 extends Exceptionpublic 异常类名异常类名(String m
3、sg)super(msg);最大公约数计算器设计最大公约数计算器设计注解:(1)使用关键字 extends 继承异常类 Exception,创建自己的异常类;(2)自定义异常的构造方法中参数 msg,用来给自定义异常命名。super 方法给其父类赋名称。【实例 3-13】定义一个自定义非整数异常。 【源代码】class NopositiveException extends ExceptionString message;NopositiveException(int m, int n) message = 数字 + m + 或 + n + 不是正整数;public String toStri
4、ng() return message;12.2 抛出异常 throw在程序设计时有些异常不是系统可以判定的, 当逻辑条件满足某种特定情况时则要主动 (手动) 抛出异常, 即使用 throw 语句抛出异常, 它的基本格式如下:throw 异常实例对象异常实例对象;这里异常实例对象一定是 Throwable 类或者它的一个子类。例如:throw new NopositiveException();/抛出非整数异常throw new ArrayIndexOutOfBoundsException();/抛出一个数组越界异常12.3 上报异常 throws如果一个方法可以导致一个异常但不处理该异常,就
5、可以使用 throws 语句来声明该异常,其基本语法格式为:返回值返回值方法名方法名(参数列表参数列表)throws 异常列表异常列表throws 字句列举了一个方法可能出现的所有异常类型,各个异常类型之间用逗号隔开。【实例 3-14】调用方法在控制台获得一个整数,getData 上报异常。在 Main 方法中捕获。 【源代码】import java.util.*;最大公约数计算器设计public class ThrowsDemo public static void getData() throws NumberFormatException throw new NumberFormatEx
6、ception();/ 格式不正确上报异常public static void main(String args) try getData(); catch (Exception e) System.out.println(e);该程序产生的输出如下:java.lang.NumberFormatException任务实施1实现思路分别输入两个整数可以用 java.util.Scanner 的 nextInt()方法。 但在程序运行时,会产生很多意想不到的输入问题,如输入的数字带小数或非数字时、特殊符号等,还有的情况是求公约数的数字为负数,程序的运行就不正确了,严重时程序发生中断,无法正确运行下
7、去。要保证程序的健壮性,可以采用异常捕获和处理技术。打开 Eclipse,创建一个类 MaxFactor;在类中定义一个方法,完成最大公约数的计算,声明该方法会抛出什么异常,同时在该方法内人为抛出一个异常对象;在 main 方法中调用定义的方法,并且捕获方法抛出的异常,并进行处理;2.程序代码 【源代码】import java.util.Scanner;class NopositiveException extends Exception/ 自定义的异常信息String message;NopositiveException(int m, int n) 最大公约数计算器设计最大公约数计算器设计
8、message = 数字 + m + 或 + n + 不是正整数;public String toString() return message;class Computer public int getMaxCommonDivisor(int m, int n) throws NopositiveException if (n = 0 | m = 0) NopositiveException exception = new NopositiveException(m, n);throw exception;if (m n) int temp = 0;temp = m;m = n;n = te
9、mp;int r = m % n;while (r != 0) m = n;n = r;r = m % n;return n;public class MaxFactorpublic static void main(String args) / 要输入的内容整数 m=24,n=36int m = 0, n = 0, result = 0;Computer a = new Computer();try Scanner input = new Scanner(System.in);System.out.print(请输入数字 m:);m = input.nextInt();System.out.
10、print(请输入数字 n:);n = input.nextInt();result = a.getMaxCommonDivisor(m, n);System.out.println(m + 和 + n + 的最大公约数 + result);m = -12;n = 22;result = a.getMaxCommonDivisor(m, n);System.out.println(m + 和 + n + 的最大公约数 + result); catch (NopositiveException e) System.out.println(e.toString();任务拓展我们在使用 JDK 的
11、API 帮助文档是用看到包中提供类的方法会说明在使用不当是会上报异常,下面我们以 String 类的 charAt(int index) 方法为例说明throws 的用法。打开 charAt 方法我们看到下列信息:charAt:public char charAt(int index)返回指定索引处的 char 值。索引范围为从 0 到 length() - 1。序列的第一个 char 值位于索引 0 处,第二个位于索引 1 处,依此类推,这类似于数组索引。 如果索引指定的 char 值是代理项,则返回代理项值。指定者:接口 CharSequence 中的 charAt参数:index - c
12、har 值的索引。返回:此字符串指定索引处的 char 值。第一个 char 值位于索引 0 处。抛出: IndexOutOfBoundsException - 如果 index 参数为负或小于此字符串的长度。在最后一行显示抛出 IndexOutOfBoundsException。也就是给定索引超范围会上报该【实例 3-15】对给定的字符串 title 求指定位置的字符。类异常。【源代码】import java.util.*;public class AddedDemo public static char getChar(String s) throws IndexOutOfBoundsEx
13、ception char c = s.charAt(50);return c;public static void main(String args) 最大公约数计算器设计String title = 山东商业职业技术学院:通讯地址:济南市旅游路 4516号;try char gchar = getChar(title); catch (IndexOutOfBoundsException e) System.out.println(e);该程序产生的输出如下:java.lang.StringIndexOutOfBoundsException: String index out of range: 50任务实训1.实训目的 掌握 throw 抛出异常; 掌握 throws 声明异常; 掌握自定义异常。2.实训内容给类的属性身份证号码 id 设置值,当给定的值长度为 18 时,赋值给 id,当值长度不为 18 时,抛出 IllegalArgumentException 异常,然后捕获和处理异常。请编写程序。最大公约数计算器设计
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。