第五章 异常

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一部分 知识点总结
一,错误的种类 1. 语法错误 2. 运行时错误:异常 3. 逻辑错误 二,异常 1. 运行时发生的错误 2. 发生异常时,程序突然终止,并将控制权传递给操作系统,即出现异常时,会提示错误,然后程序不再往 后执行. 3. 设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生 不可预见的结果 4. Java 程序的执行过程中如果出现异常,可以生成一个异常类对象,该对象封装了异常事件的信息并将被提 交给 Java 运行时系统,这个过程称为抛出异常 5. 当 Java 运行时系统接收到的异常对象时, 会寻找能处理这一异常的代码, 并把当前的异常对象交给其处理, 这一过程称为捕获异常 6. 异常处理时用到的关键字:try,catch,finally,throw,throws try, try catch,finally,throw, 三,异常类 1.类的层次结构 Throwable 类 a) Error:此类错误通常不会设计程序去捕获并处理 b) Exception:一般性的错误,通常捕获后可做处理,以确保程序继续运行 i. 其他异常类:必须处理,否则无法运行 ii. RuntimeException(发生频率比较高的异常,可以处理也可以不处理) 1. ArithmeticException:数学类异常 2. ArrayIndexOutOfBoundsException:数组下标越界异常 3. NullPointerException:空指针异常 4. ClassNotFoundException:找不到类异常 5. NumberFormatException:数字格式异常 2.异常类的方法 1) printStackTrace() :用来显示有关的异常信息,包括异常的原因和出现异常的代码行 2) getMessage() :用于获得产生异常的错误性质 四,异常处理的使用 1. 异常处理的代码格式 try{ 要监控的程序语句,即可能出现异常的语句 } catch(异常类型 对象){ 以合理的方式捕获和处理异常 若 try 块中的语句没有出错,则不会执行此块代码 } finally{ 释放资源,无论是否出现异常,都会执行此块代码 } 格式说明: 1) finally 块不是必须有的,如果有,必须和 try…catch 块连用

2) try…catch 块必须连在一起,不能分开 3) catch()括号中的必须是能够体现出相应异常的异常类对象 4) 可以有多个 catch 块,当异常发生时,会按顺序来查看每个 catch 语句,并执行第一个类型与异常类型 匹配的语句,执行其中的一条 catch 块之后,其他的 catch 语句将被忽略 5) Exception 类可以捕获任何类型的异常, catch 块使用的是 Exception 类, 若 则该块必须是最后一个 catch 块 示例 1
public class Demo1 { void oper(int n1,int n2){ int r; try{ r=n1/n2; System.out.println("r="+r); } catch(ArithmeticException e){ //数学异常类 System.out.println("除数不能为0"); e.printStackTrace(); } finally{ System.out.println("执行"); } } public static void main(String[] args) { Demo1 d=new Demo1(); d.oper(1, 2); } } 运行结果: r=0 执行 如果将代码改成 Demo1 d=new Demo1(); d.oper(1, 0); //除数为0 运行结果会变成如下: 除数不能为0 ng.ArithmeticException: / by zero at exceptionpackage.Demo1.oper(Demo1.java:8) at exceptionpackage.Demo1.main(Demo1.java:21) 执行
分析:第一种代码调用 oper()方法,传递的参数,可以让 r=n1/n2 正常执行,即不会产生任何异常,所以, 不会执行 catch 块中的代码,而是直接执行 finally 块中的代码.第二种代码调用 oper()方法,传递的参数, 除数为 0, r=n1/n2 会产生除数为 0 的异常, 即 所以会执行 catch 块中的代码, 先显示程序中指定的输出内容 "除 数不能为 0" ,然后执行 e.printStackTrace();显示系统提供的异常描述.执行结束之后,继续执行 finally 块
中的代码.
示例 2

public class Demo1 { void oper(String n1,int n2){ int r,nn,a=0; try{ nn=Integer.parseInt(n1); //将字符串参数转换为整型,如果 n1 是由数字 //组成的字符串,将会转换成功,否则将会 //转换失败,产生类型转换失败异常 r=nn/n2; //如果n2为0,将会产生除数为0的异常 System.out.println("r="+r); a=r; } catch(NumberFormatException e){ System.out.println("字符串转换出错"); e.printStackTrace(); } catch(ArithmeticException e){ System.out.println("除数不能为0"); e.printStackTrace(); } catch(Exception e){ } finally{ System.out.println("执行"); } System.out.println("a="+a); } public static void main(String[] args) { Demo1 d=new Demo1(); d.oper("12", 0); } } //此行代码无论发生哪个异常都会执行 //此行代码无论发生哪个异常都会执行 //Exception类的异常处理必须放在最后一个catch块 System.out.println("出现异常"); //如果发生异常,此代码不会执行,a还是初始值0
运行结果:
除数不能为0 ng.ArithmeticException: / by zero at exceptionpackage.Demo1.oper(Demo1.java:9) at exceptionpackage.Demo1.main(Demo1.java:31) 执行 a=0 如果将代码改成 Demo1 d=new Demo1(); d.oper("ab", 0); 运行结果如下 字符串转换出错 ng.NumberFormatException: For input string: "ab" at ng.NumberFormatException.forInputString(NumberFormatException.java:48) at ng.Integer.parseInt(Integer.java:447)

相关文档
最新文档