




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第 7 章异 常2本章主要内容异常的概念Java对异常的处理机制Java提供的异常类异常处理的方法用户自定义异常3一、异常的概念异常是指程序运行过程中出现的影响程序正常运行的意外或特殊的事件。注意:不包含常见的语法错误、逻辑错误。语法错误由编译程序检查并给予提示。若一个程序存在语法错误,将不能通过编译。逻辑错误常常不影响程序的执行,但运行结果不正确。4二、Java对异常的处理机制Java将各种异常标准化,并分别定义相应的类以便对各类异常信息进行记录和描述。程序负责处理异常的代码段异常类对象抛出异常捕获异常处理异常抛出异常:虚拟机运行时检测到错误后,会创建对应该错误的异常对象,提交给运行系统。
2、捕获异常:当程序抛出异常后,系统查找处理该异常的代码,然后把异常对象作为参数传递给该代码块。处理异常:异常处理代码块根据接收的异常对象信息,进行相应的处理。5Java异常处理机制的好处将异常事件分类,体现了良好的层次性;将处理异常的代码与“常规”代码分开,使程序逻辑简洁清晰,规范化异常的处理过程,增强了程序的可读性;可以将异常事件沿调用栈自动向上传递。将各种异常类组成类层次结构,可以提高异常处理代码的重用性。6异常类结构Error 类描述系统异常Exception 类描述应用程序异常ObjectThrowableErrorException7Throwable类Throwable类定义了获得异
3、常信息和显示程序堆栈中跟踪信息的成员方法,通过对堆栈中的跟踪信息,可以得知异常出现的位置和出错的内容。它是所有异常类的父类。public String getMessage() /取出错误信息public void printStackTrace() /打印程序堆栈注:程序堆栈记录了程序调用过程的数据,通过它可以找到程序出错的执行过程 8Error类Error类描述了系统异常,即由Java虚拟机( JVM:Java virtrual machine)出现的问题导致的异常,它们是不可恢复的,不需要由应用程序检测并处理。9Exception 类Exception类描述应用程序异常,即由应用程序出现
4、的问题导致的异常,这类异常需要由应用程序检测并处理。异常类:public Exception( ); /构造方法public Exception(String s); /构造方法public String toString( ); /字符串变换public String getMessage( ); /取得错误信息10Exception类结构ExceptionAWTExceptionIOExceptionRuntimeExceptionJava提供了各种各样的异常类,都继承Exception基类。RuntimeException 属于“未检查异常”,这是难于预料的异常;其它属于“已检查异常”,
5、在编程过程可以利用异常处理程序来对应,并且在成员方法中,必须对于所有可能出现的“已检查异常”进行声明。11三、异常处理的方法对于RuntimeException类异常应用程序可以不直接进行处理,而由Java虚拟机自动进行处理;处理结果是停止程序的运行,并在标准输出设备上显示相应的异常信息。其他异常类可以使用Try-catch-finally语句捕获并进行处理如果下级程序不处理异常,可以通过throws子句声明抛出的异常类交给上级程序去处理121、RuntimeException异常RuntimeException类异常主要包括以下异常: (1) ArithmeticException 算数异常
6、(被零除) (2) NullPointerException 空指针异常 (3) ClassCastException 类转换异常 (4) NegativeArraySizeException 负数数组异常 (5) ArrayIndexOutOfBoundsException 数组下标越界异常13(1)ArithmeticException如果程序中试图除0,或用0取模,就会产生该类异常。class Arith public static void main(String args ) int j=1; j=j/(j-1); 14(2) NullPointerException当程序试图访问一
7、个没有实例化的对象或没有分配空间的数组时就会引发该类异常。class TextNullPointer public static void main(String args) String str=null; /字符串未创建 int a ; /数组未创建 str.length(); /会发生空指针异常 a0=0; /会发生空指针异常 15(3)ClassCastException如果试图把对象obj强制转换成某个类,而obj既不是这个类的实例,也不是这个 类子类的实例,就会引发该类异常。class ClassCast public static void main(String args) D
8、ate obj=new Date( ); Point s=obj; /发生类型转换异常 System.out.print(s); 16(4)NegativeArraySizeException若数组的长度定义为负值,则将引发该类异常。class NegArray public static void main(String args ) int a =new int-1; /发生负数数组大小异常 a0=0; 17(5)ArrayIndexOutOfBoundsException当数组下标越界时,将引发该类异常。class ArrayOut public static void main(Str
9、ing args ) int a =new int10; a10=0; /数组下标越界异常 182、异常的抛出/捕获/处理try 正常的程序逻辑 (执行时可能抛出异常) ; Catch(异常类名1 异常对象) 异常处理; Catch(异常类名2 异常对象).Catch(异常类名n 异常对象) 异常处理;finally 最终处理;应用程序中捕获并处理抛出异常的程序部分。出现异常时转向异常处理程序无论是否异常都要执行最终处理程序19public class TryCatchFinally public static void main( String args ) Method( 0 ); Met
10、hod( 1 ); Method( 2 ); public static void Method( int a ) System.out.println(调用方法 Method(+a+); try if( a=0 ) System.out.println(t没有异常产生,正常退出。); return; else if( a=1 ) int i=0; int j=4/i; else if ( a=2 ) int iArray =new int4; iArray4=3; 捕获并处理异常的例Try部分:发生并抛出异常20 catch ( ArithmeticException e ) System.
11、out.println(t捕获异常: +e); catch ( ArrayIndexOutOfBoundsException e ) System.out.println(t捕获异常:+e.getMessage( ); catch ( Exception e ) System.out.println(“t其他异常:”+e.printStackTrace); finally System.out.println(tfinally块总是被执行。); Finally部分:无论异常有无必须执行Catch部分:捕获异常并处理21运行结果调用方法 Method(0)没有异常产生,正常退出。finally块
12、总是被执行。调用方法 Method(1)捕获异常: java.lang.ArithmeticException: / by zerofinally块总是被执行。调用方法 Method(2)捕获异常:nullfinally块总是被执行。223、抛出异常的声明在某些情况下,不希望发生异常的成员方法直接处理异常,而是向外层程序抛出异常,由调用这个成员方法的外层方法进行处理,这时就需要利用throws子句在方法首部声明抛给外层的异常。方法的格式如下:返回类型 方法名(参数表) throws 异常名列表 public static void method(int i) throws Exception
13、j=k/i;(发生异常) 23下层抛出异常上层捕获并处理public static void main( String args ) try methed(0); Catch(Exception e) 异常处理; method方法抛出异常时退出执行,由调用程序处理异常method方法没有发生异常,则正常执行,返回调用程序异常可以多层嵌套地向上抛出24public static void Method(int i) throws ArithmeticException, NumberFormatException System.out.println(调用方法Method(+i+);if( i=
14、0 ) System.out.println(“t没有异常事件。”); return;else if( i=1 ) String str = xyz; int c=Integer.parseInt(str); 方法内没有异常处理的trycatchfinallythrows 异常列表声明要向外抛出的异常非数字字符串变换成int时,将抛出异常给外层方法下层程序抛出异常不处理25public class throwsException public static void main( String args ) try Method( 0 ); Method( 1 ); catch(NumberFo
15、rmatException e ) System.out.println(t捕获异常:+e); catch( ArrayIndexOutOfBoundsException e ) System.out.println(t捕获异常:+e); finally System.out.println(“finally 块总是会被执行.”); 外层方法有异常处理的trycatchfinally被调用方法抛出异常时,由外层程序处理上层程序捕获异常并处理26运行结果调用方法Method(0)没有异常事件。调用方法Method(1)捕获异常:java.lang.NumberFormatException: x
16、yzfinally 块总是会被执行.27四、自定义异常可以通过程序自定义异常 class 自定义异常 extends 父异常类名 类体; 举例class NumberRangeException extends Exception NumberRangeException(String msg) super(msg); 28抛出自定义异常的格式 if (产生异常) throw new myException(this); else .29/自定义数值超范围异常类public class NumberRangeException extends ExceptionNumberRangeExcep
17、tion(String msg) super(msg); 自定义异常的例30public class ExceptionTest JFrame implements ActionListener JLabel L1,L2; JTextField tf1, tf2; String answerStr; double d1,d2; public ExceptionTest( ) L1=new JLabel(“请输入0到100之间的整数”); getContentPane().add(L1); tf1 = new JTextField(6); getContentPane(). add(tf1);
18、tf2 = new JTextField(6); getContentPane(). add(tf2); L2=new JLabel( 两数相除的结果: ); getContentPane(). add(L2); tf1.addActionListener(this); tf2.addActionListener(this); pack(); setVisible(true); 自定义异常的例31 public void actionPerformed(ActionEvent evt) try d1=Double.valueOf(tf1.getText( ).doubleValue( ); d2=Doub
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省广州市白云区2023-2024学年五年级下学期语文期末试卷(含答案)
- 2025年度品牌形象设计委托合同协议书范本
- 2025年智能设备采购合同范本
- 2025年内蒙古劳动合同书模板
- 2025电子产品租赁合同模板
- 2025租赁合同违约金条款
- 2025授权代理的合同范本协议
- 2025年签订服务合同的关键注意事项
- 2025汽车购买合同协议书
- 2025硕士劳动合同争议调解
- 广州市黄埔区教育局招聘事业编制教职员考试真题2024
- 国际经济学(下册国际金融)克鲁格曼-中文答案
- 2025年宁夏银川市唐徕中学南校区中考一模英语试题(原卷版+解析版)
- 乡村民宿开发管理运营手册
- 殡葬服务笔试题库及答案
- 2025年光大银行校园招聘笔试参考题库(带答案)
- 中医康复理疗师职业指导试题及答案
- 全过程工程咨询投标方案(技术方案)
- 研究生教育高质量发展新动能推动方案
- 宁波十校2025届高三3月联考语文试卷(含答案解析)
- 在线网课学习课堂《人工智能(北理 )》单元测试考核答案
评论
0/150
提交评论