当前位置:文档之家› 北大青鸟 java教程 (5)

北大青鸟 java教程 (5)


type calledmethod-name (parameter-list) throws exception-list { // body of method }
处理异常
处理异常
18
ACCP V4.0
用户自定义异常 2-1
自定义异常概念 使用自定义异常的时候
JavaAPI提供的内置异常不一定总能捕获程序中发生的 所有错误.有时会需要创建用户自定义异常
嵌套 try – catch 块
16
ACCP V4.0
使用 throw 和 throws 2-1
可执行程序语句 语句 1
引发的异常
语句 2 停止
throw 异常
语句 3
17
异常处理程序
ACCP V4.0
使用 throw 和 throws 2-2
被调用的方法 可能会导致异常 调用方法 防止被调用的方法出现 异常并处理异常 type callingmethod-name { try { // statements calledmethod-name(); }catch(Exception e) { //statements} }
11
ACCP V4.0
多重 catch 块3-1
一段代码可能会生成多个异常 当引发异常时,会按顺序来查看每个 catch 语句,并执行 第一个类型与异常类型匹配的语句 执行其中的一条 catch 语句之后,其他的 catch 语句将被 忽略 try{ ……. } catch(ArrayIndexOutOfBoundsException e) { …… } catch(Exception e) { …… }
ACCP V4.0
try 和 catch 块 2-1
代码块
try
引发
单元
catch
程序控制
异常
执行 catch 后程序 继续正常运行
8
ACCP V4.0
try 和 catch 块 2-2
try 和 class ArithmeticException { public catch 块的用法
/** 构造方法. */ public ArithmeticException() { class ExceptionRaised { } /** 构造方法.void main(String[] args) { */ public static public ExceptionRaised() { ExceptionRaised obj = new ExceptionRaised(); } try { /** /* 定义变量 result 以存储结果. */ * 这个方法运行时将会产生一个异常. int result = obj.calculate(9, 0); * @param operand1 除法中的分子 System.out.println(result); * @param operand2e) { }catch (Exception 除法中的分母 * @return int 返回除法的结果 System.err.println("发生异常:" + e.toString()); */ e.printStackTrace(); public int calculate(int operand1, int operand2) { } int result = operand1 / operand2; } return result; } } }
3
ACCP V4.0
什么是异常?
在运行时发生的错误 异常情况 public class ExceptionRaised { public ExceptionRaised() { } 异常 public int calculate( int operand1, int operand2) { int result = operand1 / operand2; return result; 程序突然终止并将控制交 } 给操作系统 public static void main(String[] args) { ExceptionRaised obj = new ExceptionRaised(); int result = obj.calculate(9, 0); System.out.println(result); } }
13
Object
RuntimeException


ACCP V4.0
多重 catch 块3-2
使用多重 catch 语句时,异常子类一定要位于异常父类之 前
try{
…...
} catch(Exception e) { …… } catch(ArrayIndexOutOfBoundsException e) { …… }
ACCP V4.0
class NestedException { /* 构造方法. */ protected NestedException() { } /** 这个方法检测数字的格式. * @param argument 用于存储 args 的值. */ public test(String[] argumnet) { try { int num = Integer.parseInt(args[1]); /* 嵌套 try 块. */ try { int numValue = Integer.parseInt(args[0]); System.out.println("args[0] + "的平方是 " + numValue * numValue); } catch (NumberFormatException nb) { System.out.println("不是一个数字! "); 因此需要嵌套 } 异常处理程序 } catch (ArrayIndexOutOfBoundsException ne) { System.out.println("请输入数字!!!"); } } /**main方法*/ public static void main(String[] args) { NestedException obj = new NestedException(); obj.test(args[0]); 如果内层 try 没有相应的 } } catch,则检查外层 catch
try
释放资源等
finally
catch
以合理的方式 捕获和处理异常
throw
throws
手动引发异常Biblioteka 指定由方法引发的异常6
ACCP V4.0
Java异常类
异常
Exception RuntimeException ArithmeticException IllegalArgumentException ArrayIndexOutOfBoundException NullPointerException ClassNotFoundException NumberFormatException IOException FileNotFoundException EOFException InterruptedException
7
说明
异常层次结构的根类 许多 ng 异常的基类 算术错误情形, 算术错误情形,如以零作除数 方法接收到非法参数 数组大小小于或大于实际的数组大小 尝试访问 null 对象成员 不能加载所需的类 数字转化格式异常, 数字转化格式异常,比如字符串到 float 型数字的转换无效 I/O 异常的根类 找不到文件 文件结束 线程中断
自定义异常需要继承Exception 及其子类
19
ACCP V4.0
class ExceptionClass { ExceptionClass(int val) { size = val; try { 创建用户自定义异常 checkSize(); 继承 Exception 或其子类 } catch (ArraySizeException e) { System.out.println(e); class ArraySizeException extends NegativeArraySizeException { } /** 构造方法. */ } ArraySizeException() { /** 声明变量以存储数组的大小和元素. */ super("您传递的数组大小非法"); class UserDefinedExceptions { private int size; } /** 构造方法. */ } private int[] array; /** 检查数组长度的方法. protected UserDefinedExceptions() { } * @ throws 一个 ArraySizeException */ /** public void checkSize() throws ArraySizeException { * 类和应用程序的唯一入口点. if (size < 0) { * @paramnew ArraySizeException(); throw arg 字符串参数的数组 */ } public static void main(String[] arg) { array = new int[3]; ExceptionClass obj < 3; count++) { for (int count = 0; count= new ExceptionClass(Integer.parseInt(arg[0])); } array[count] = count + 1; } } } 示例: 示例 6 20 ACCP }
4
ACCP V4.0
处理异常 2-1
处理运行时错误的伪代码
……… IF B IS ZERO GO TO ERROR C=A/B PRINT C GO TO EXIT ERROR: 处理异常的块 DISPLAY EXIT: END "以零作除数,代码导致错误"
相关主题