第6章异常、日志和断言_第1页
第6章异常、日志和断言_第2页
第6章异常、日志和断言_第3页
第6章异常、日志和断言_第4页
第6章异常、日志和断言_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、类和类之间的关系总结 指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。 在Java中继承关系通过关键字extends明确标识一、继承关系 指 的 是 一 个 c l a s s 类 实 现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。 在Java中此类关系通过关键字implements明确标识二、实现关系 依赖就是一个类A使用到了另一个类B,而这种关系是具有偶然性、临时性,但类B的变化会影响到类A 表现在代码层面为类B作为参数被类A在某个method方法中使用三、依赖关系 关联体现的是两个类之间语义级别的

2、一种强依赖关系。一般是长期性的,而且双方的关系一般是平等的。关联可以是单向、也可是双向的 表现在代码层面为被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量四、关联关系 是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享 表现在代码层面,和关联关系是一致的,只能从语义级别来区分五、聚合关系 是关联关系的一种特例,它体现的是contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分间的关系,但此时整体与

3、部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束 表现在代码层面,和关联关系是一致的,只能从语义级别来区分六、组合关系第6章 异常、日志和断言 教学内容 主要讲述java语言中独特的例外处理机制和断言 教学目的与要求 深刻理解 java 语言中独特的例外处理机制,掌握处理问题的方法 了解断言的含义及简单使用第6章 异常、日志和断言 教学重点 正确地使用捕获例外和声明、抛弃例外的两种例外处理的方法。 教学难点 如何使用Java中两种例外处理机制,抛弃例外和声明抛弃例外的区别与联系。 在实际的项目中,程序执行时经在实际的项目中,程序执行时经常会出现一些意外的情况,这些常会出现一些意外

4、的情况,这些意外的情况会导致程序出错或者意外的情况会导致程序出错或者崩溃,从而影响程序的正常执行,崩溃,从而影响程序的正常执行,如果不处理这些意外情况,将使如果不处理这些意外情况,将使项目的稳定性降低项目的稳定性降低问题Java语言提供一套完善的语法,通过处理上述情况来增强项目的稳定性,这套语法就是异常处理的语法问题概 述2) 异常实际上是“异常事件”的简称1) 异常:异常:程序执行时出现的不可预料的情况程序执行时出现的不可预料的情况3) 异常处理:异常处理:出现异常时相关的处理规则出现异常时相关的处理规则4) Java语言采用语言采用C+风格的异常处理风格的异常处理回 忆1) C语言:语言:

5、一般使用数字表示各种异常情况2) 浏览器中的 404错误 运行的方法或运行的方法或Java虚拟机产生异常对象虚拟机产生异常对象 异常对象被传递给异常对象被传递给Java运行时系统运行时系统.运行时运行时系统从产生异常的方法开始,在系统从产生异常的方法开始,在方法轨迹栈方法轨迹栈中进行回溯查找,直到找到包含有对此异常中进行回溯查找,直到找到包含有对此异常进行处理的方法为止。进行处理的方法为止。 回溯到回溯到main方法时此异常还未被处理,或方法时此异常还未被处理,或者者main方法中也未对它进行处理,则运行方法中也未对它进行处理,则运行时系统和程序就会终止。时系统和程序就会终止。提示:提示:Ja

6、va虚拟机是用方法轨迹栈保存每个虚拟机是用方法轨迹栈保存每个调用方法的相关信息调用方法的相关信息概 述u异常处理类异常类都直接或间接地继承于类异常类都直接或间接地继承于类Throwable 常见异常处理类异常类类名异常类类名功能说明功能说明java.lang.NullPointerException空指针异常,调用空指针异常,调用null对对象象中的非中的非static成员成员变量变量或成员方法时产生该异常或成员方法时产生该异常java.lang.ArrayIndexOutofBoundsException数组下标越界异常,数组数组下标越界异常,数组下标数值小于下标数值小于0 或大于等或大于等

7、于数组长度时产生该异常于数组长度时产生该异常java.lang.IllegalArgumentException非法参数异常,当参数不非法参数异常,当参数不合法时产生该异常合法时产生该异常FileNotFoundException文件不存在异常文件不存在异常u异常处理类2) Exception类类:用户程序能够捕捉到用户程序能够捕捉到的异常情况的异常情况 运行时异常运行时异常: 程序运行时发现的由程序运行时发现的由Java虚拟机抛出的虚拟机抛出的 非运行时异常非运行时异常: 编译时检测到编译时检测到. 必须处必须处理理1) Error类类: 致命异常即错误致命异常即错误u异常处理1) try、

8、catch、throw、throws和和finally共共5个关键词个关键词2) try和和catch用于处理异常用于处理异常3) throw或或throws用于抛出异常用于抛出异常4) finally总是与总是与try和和catch语句一块使语句一块使用用u异常处理系统在运行时,在系统在运行时,在方法轨迹栈方法轨迹栈中查找处中查找处理异常的方法的过程称为理异常的方法的过程称为异常捕获异常捕获try /可能抛出异常的代码块可能抛出异常的代码块catch(异常类型异常类型1 对象名对象名1) /异常处理语句异常处理语句 catch(异常类型异常类型2 对象名对象名2) /异常处理语句异常处理语句

9、u异常处理类一个一个try语句可以有语句可以有零零个(此时个(此时必须必须有有finally)或多)或多个个catch语句语句1class ExceptionDemo 2 public static void main(String args) 3 try int a = 0;4 int b = 2/a; 5 catch (ArithmeticException e) 6 System.out.println(“getMessage:” + e.getMessage(); 7 StackTraceElement ste = new Throwable().getStackTrace()0; 8

10、 System.out.println(ste.getFileName()+“:行号为行号为” +ste.getLineNumber(); 9 e.printStackTrace() 10 11 12 getMessage(): / by zeroExceptionDemo.java: 行号为 12java.lang.ArithmeticException: / by zeroat ExceptionDemo.main(ExceptionDemo.java:5)Java中的中的try语句可以语句可以嵌套嵌套声明声明1 class ExceptionDemo 2 public static vo

11、id main(String args)3 try int a = args.length;4 int b = 2/a;5 try if(a=1) a = a /(a-a); 6 if(a=2) int c = 1; 7 c2= 2;8catch(ArrayIndexOutOfBoundsException e)9System.out.println(数组元素下标越界异常数组元素下标越界异常); 10 catch(ArithmeticException e)11 System.out.println(除数为除数为0异常异常); 1213u抛出异常在一个方法的运行过程中如果发生了在一个方法的运行

12、过程中如果发生了异常,则这个方法将生成一个代表该异常,则这个方法将生成一个代表该异常的对象,并把它提交给正在运行异常的对象,并把它提交给正在运行这个方法的系统。这个过程称为这个方法的系统。这个过程称为抛出抛出一个异常一个异常关键字:关键字: throw和和throwsuthrow1) throw用于在用于在方法中方法中直接将异常抛出直接将异常抛出2) 异常重掷异常重掷: catch子句利用子句利用throw重新抛出此异常重新抛出此异常uthrow1class ExceptionDemo 2 static void A()3try throw new NullPointerException(“

13、抛出异常演示抛出异常演示”); 4 catch(NullPointerException e)5 System.out.println(“方法方法A中捕获到异常中捕获到异常: ” + e.getMessage() );6 throw e; 7 8 public static void main(String args)9 try A(); catch(NullPointerException e) 10 System.out.println(“方法方法main中捕获到异常中捕获到异常: ” + e.getMessage() ); 11 12 13 方法A中捕获到异常: 抛出异常演示方法main

14、中捕获到异常: 抛出异常演示uthrows子句1) 声明方法时,将该方法可能产生或出现的声明方法时,将该方法可能产生或出现的, 他自身没有处理的各种异常通过他自身没有处理的各种异常通过throws声声明明2) 方法调用者方法调用者有可能处理有可能处理throws子句中所声子句中所声明的各种异常(方法体内有无:明的各种异常(方法体内有无:throw决定)访问权限访问权限 返回类型返回类型 方法名方法名(参数列表参数列表) throws 异常类型列表异常类型列表 /方法体方法体 uthrows子句1 class ExceptionDemo 2static void throwsOne() thro

15、ws Exception 3throw new Exception(Throws演示演示);45public static void main(String args) 6 try 7throwsOne();8 catch (Exception e) 9 System.out.println(main方法捕获异常:方法捕获异常: + e.getMessage() );10 11 12 ufinally语句没有彻底消除资源泄露问题没有彻底消除资源泄露问题:对象资源对象资源非对象资源非对象资源确保一段代码不管发生什么异常都能确保一段代码不管发生什么异常都能被执行被执行清空内部工作状态或释放非对象的

16、资清空内部工作状态或释放非对象的资源源必须与必须与try或或try/catch语句块配合使用,语句块配合使用,且紧接且紧接try-catch语句的最后一个语句的最后一个catch语句块语句块ufinally语句1) try或或catch代码块中有无代码块中有无return、continue、break、throw等语句,等语句,finally子句总被执行。子句总被执行。2) 唯一例外唯一例外: try内执行一条内执行一条 System.exit(0); 语句语句1 class ExceptionDemo 2 static void procA() 3 try System.out.printl

17、n(方法方法A);4 throw new RuntimeException(demo);5 finally System.out.println(方法方法A的的finally); 6 7 static void procB() 8try System.out.println(“方法方法B”); return; 9 finally System.out.println(方法方法B的的finally); 10 11 static void procC() 12try System.out.println(“方法方法C”); System.exit(0);13 finally System.out.

18、println(方法方法C的的finally);14 1 public static void main(String args) 2try 3 procA();4 catch (Exception e) 5System.out.println(方法方法main捕获异常捕获异常);67procB();8procC();9 10方法A方法A的finally方法main捕获异常方法B方法B的finally方法CString s = abc; try intn= Integer.parseInt(s); catch(Exceptione) u不处理有可能会影响后续逻辑的执行执行。有可能会影响后续逻辑

19、的执行执行。此处理方式一般被初学者使用的比此处理方式一般被初学者使用的比较多较多自定义异常类自定义异常类:Throwable,Exception类及其子类类及其子类u自定义异常1.1.class UserException class UserException extends IOExceptionextends IOException2.2. private int i; private int i;3.3. UserException(int j)i=j; UserException(int j)i=j;4.4. public String public String toString(

20、) toString() return return “UserException UserException ”+i;+i;5.5. 6.6.public class Examplepublic class Example 7.7. static void dme(int j)static void dme(int j) throws UserException throws UserException8.8. System.out.println(System.out.println(“dme:dme:”+j);+j);9.9. if(j10) throw new UserExceptio

21、n(j); if(j10) throw new UserException(j);10.10. 11.11. public static void main(String args) public static void main(String args)12.12. try try13.13. dme(15); dme(15);14.14. catch(UserException e)catch(UserException e) 15.15. System.out.println( System.out.println(“Exception is:Exception is:”+e); +e)

22、; 16.16. 17.17. dme:15Exception is :UserException 15u自定义异常toString是是Object类的方法。如果你定义的类的方法。如果你定义的类没有覆盖类没有覆盖toString方法,则对象在调用方法,则对象在调用toString方法时用的是方法时用的是Object类类toString方法方法,返回的是,返回的是“类名类名hashcode.tostring()都是自动调用的(带不带都是自动调用的(带不带toString效果是一样的)效果是一样的)System.out.println(obj)在参数是一个对象在参数是一个对象时,会首先调用该对象的

23、时,会首先调用该对象的toString方法。方法。String类和类和StringBuffer类都覆盖了类都覆盖了toString方法方法,都是返回字符串都是返回字符串u关于java的tostring方法u异常与方法覆盖1) 如果父类方法如果父类方法声明抛出异常声明抛出异常,子子类方法类方法可以可以不声明抛出不声明抛出异常异常 或或只能声明父类方法给定的只能声明父类方法给定的异常类或它的子异常类或它的子类类2) 如果父类方法中如果父类方法中未未声明抛出例外,那么声明抛出例外,那么子类覆盖的方法也子类覆盖的方法也不能不能抛出异常抛出异常u异常与构造造方法1) 父类的构造方法声明抛出的异常父类的构

24、造方法声明抛出的异常必须必须在子类的构造方法中也声明抛出在子类的构造方法中也声明抛出2) 子类子类构造方法也可以抛出父类的构造构造方法也可以抛出父类的构造方法中根本方法中根本不存在不存在的异常的异常u异常与构造造方法1 public class ExceptionDemo extends Parent2 public void addValue( ) throws IllegalAccessException 3 ExceptionDemo() throws IllegalAccessException4 5 class Parent 6 Parent() 7 public void addV

25、alue() throws Exception8 public class Parent public class Parent public int addValue( int a, int b) public int addValue( int a, int b) int s; int s; s = a+b; s = a+b; return s; return s; class Child extends Parent class Child extends Parent 如下方法可否放到如下方法可否放到ChildChild类内类内? ?public int addValue( int a

26、, int b )throws MyException public int addValue( int a, int b )throws MyException /do something. /do something.Nu日志 作用作用 自动记录程序运行过程中发生异常的具自动记录程序运行过程中发生异常的具体情形,便于系统的调试和排错体情形,便于系统的调试和排错 Java语言语言java.util.logging Apache的的Log4j u断言(1) 断言断言是一个包含布尔表达式的语句,是一个包含布尔表达式的语句,它对一个布尔表达式进行检查它对一个布尔表达式进行检查.(2) 程序必须保证

27、表达式的值为程序必须保证表达式的值为true;(3)如果为如果为false,说明程序已处于不正确,说明程序已处于不正确状态状态(4) 断言检查通常在开发和测试时打开。断言检查通常在开发和测试时打开。为了提高性能,在软件发布后,通常要为了提高性能,在软件发布后,通常要关闭掉断言检查关闭掉断言检查u使用断言assert 表达式表达式1 :表达式表达式2含义含义:1. 对表达式对表达式1进行计算,如果为进行计算,如果为false,抛出,抛出AssertionError对象(其父类是对象(其父类是Error)。)。如果包括表达式如果包括表达式2,程序将表达式,程序将表达式2的结果,的结果,作为作为As

28、sertionError的构造方法的参数来的构造方法的参数来创建创建AssertionError对象,并抛出该对象对象,并抛出该对象2. 如果表达式如果表达式1值为值为true,则表达式,则表达式2将不被将不被计算。计算。u断言public class AssertionDemo public static void main(String arg) int a = 1; assert a = 0; javac AssertionDemo.javajava -ea AssertionDemoException in thread “main” java.lang.AssertionErrorA

29、ssertionDemo.main(AssertionDemo.java:5)u断言1 public class AssertionDemo 2 public static void main(String args) 3 AssertionDemo at = new AssertionDemo();4 at.assertMe(true);56 7 private void assertMe(boolean b) 8String s = null;9assert b?true:false :s = 你好你好; 10 11 at.assertMe(false);u打开和关闭断言默认情况下,断言是

30、关闭的默认情况下,断言是关闭的打开打开: -enableassertions/-ea:操作对象操作对象关闭关闭: -disableassertions/-da:操作对象操作对象如果操作对象是类,直接给出类名即可。如果如果操作对象是类,直接给出类名即可。如果操作对象是用包描述的,则其格式为:操作对象是用包描述的,则其格式为:(1)包名)包名1.包名包名2(2)包名)包名1.包名包名2 如果仅有如果仅有“”则表示当前工作目录下的默则表示当前工作目录下的默认包即未命名包认包即未命名包1. class Father2. public void baseMethod()3. assert false:A

31、ssertion failed:This is base ;4. System.out.println(Base Method);5.6. 7. class Son extends Father 8. public void derivedMethod() 9. assert false:Assertion failed:This is derive;10. System.out.println( “Derived Method” );11. public static void main( String args ) try Son son = new Son();son.baseMethod( );son.derivedMethod(); catch( AssertionError ae ) System.out.println(ae); cmd: java SonBase Method Derived Methodcmd: java -ea SonJava.lang.AssertionError:Assertion Failed:This is basecmd: java -da SonBase MethodDerived Method cmd: java -ea:Farher SonJava.lang.AssertionError:Assertion F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论