Java程序设计@第06章-异常与断言综述综述_第1页
Java程序设计@第06章-异常与断言综述综述_第2页
Java程序设计@第06章-异常与断言综述综述_第3页
Java程序设计@第06章-异常与断言综述综述_第4页
Java程序设计@第06章-异常与断言综述综述_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

Java程序设计第06章异常与断言本章内容CORE-C06-01捕捉异常

CORE-C06-02处理异常

CORE-C06-03断言

CORE-C06-04日志记录

本章目标1、能处理异常。2、能使用断言调试程序。第01节捕捉异常

知识点预览#节知识点难点重点应用1CORE-C06-01捕捉异常1、异常捕捉语法

√√2、JDK异常类型设计

√√3、异常对象

√√4、捕捉多个异常

√√5、finally子句

√√1、异常捕捉语法-1异常捕捉是属于流程控制的语法范畴,只是流程改变的条件是程序捕捉到系统或者程序抛出的异常。异常不是错误:程序中的异常,一般称为例外情况,可以理解为是非正常情况,这里需要分清楚的是异常和错误不是一个概念。异常并非是真正的错误,因为他们是一些例外情况,这些情况有可能不会导致系统直接崩溃掉,但是它的存在只能说是程序的某种缺陷,或者说是非必然缺陷,而Java里面提供的异常体系结构就是为了解决这些缺陷而存在的。1、异常捕捉语法-2语法块try中发生异常,系统把执行跳转到匹配catch后异常类型的catch块中。

try{

语句;

}catch(Throwablee){//catch与finally至少出现一个,也可以同时出现。

语句;}catch(Throwablee){//catch可以出现多次,但同样类型的异常只能catch一次

语句; //抛出的异常与catch指定的异常类型符合,就执行。} //如果多个catch捕捉的异常是父子关系,则父异常排后。finally{ //finally最多只能出现一次。

语句; //finally任何时候都执行。} 2、JDK异常类型设计Throwable是所有异常的基类,程序中一般不会直接抛出Throwable对象,Throwable本身存在两个子类实例,一个是Error、一个是Exception;3、异常对象异常对象一般是系统抛出的,当程序捕捉到异常后跳转到catch块,通过catch的参数传递给用户,用户可以直接使用。通过异常对象通常可以得到两个有用的操作:获得异常信息。打印异常栈。publicStringgetMessage();publicvoidprintStackTrace()4、捕捉多个异常在try{}catch(Throwablee){}finally{}结构中,允许有多个catch。即意味着try可以同时捕捉多个异常并处理多个异常。但每个异常只有一个catch块得到执行,该catch块的参数类型必须与捕捉到的异常对象是同一类型。这里的同一类型可以是同一继承结构上的类。抛出的异常对象没有catch匹配,则程序的执行流程会跳转到虚拟机执行。捕捉多个异常必须遵循如下语法规则:不能2次捕捉、处理完全相同名字的异常类。5、finally子句-1在try{}catch(Throwablee){}finally{}结构中catch块与finally必须至少出现一个,当然也可以同时出现。块finally与catch块的最大区别,catch是参数类型与捕捉到的异常对象匹配才能执行。而finally是任何条件下都会得到执行。一般finally用来处理的文件IO操作时的异常处理。不论文件操作成功还是失败,文件都是需要关闭的。try{//不处理异常也会执行finally}finally{}try{ 处理异常后执行finally}catch(Exceptione){}finally{}第02节处理异常

知识点预览#节知识点难点重点应用2CORE-C06-02处理异常1、抛出异常

√√2、异常转移

√√3、创建异常类

√√4、异常类设计

√√1、抛出异常-1上节处理的异常是从哪里来的呢?通常包含两种情况,虚拟机抛出的是Error,应用程序抛出的是Exception。应用程序的Exception是使用throw关键字抛出的。语法:语句throw抛出异常对象,并中断程序的执行。语句throw在函数中调用来抛出异常,在调用函数的代码中可以使用try捕捉到,并使用catch处理。没有捕捉的异常会被虚拟机缺省处理(打印异常栈,终止程序)。Exceptione=newException(“异常原因描述字符串”);throwe;throw异常对象;//只能抛出一个异常对象。1、抛出异常-2强制异常与处理抛出异常的函数,在调用的时候是可以捕捉、也可以不捕捉异常的。为了强制用户,Java引入一种语法机制,在函数后面可以使用异常列表。异常列表表示在调用该函数的时候,异常列表中的异常必须全部处理,或者转移。异常列表语法publicclassThrowException{publicvoidmethod()throwsMyException,YourException{

}}throws异常类1,异常类2,…… // 必须在方法后。1、抛出异常-3覆盖方法声明抛出的异常,必须在原方法声明抛出的异常范围内,不能声明抛出原方法没有声明抛出的异常。也就是说,如果有原方法中没有声明的异常抛出,则只能在该覆盖方法中使用try…catch进行捕获和处理,而不能使用throws声明抛出该异常。publicclassClsA{publicvoidmethod()throwsMyException,YourException{}}publicclassClsBextendsClsA{//publicvoidmethod()throwsIOException{//错误//publicvoidmethod()throwsMyException{ //合法

//publicvoidmethod()throwsException{ //错误publicvoidmethod(){ //合法

}}2、异常转移一般调用有异常列表的函数或者方法,要么处理,要么转移。所谓转移就是不处理函数或者方法的异常,而是转移给另外调用者处理,如果一直转移都没有处理,最终会转移给虚拟机做缺省处理。异常转移的语法非常简单,就是在调用函数的代码所在函数后面添加异常列表。publicclassThrowException1{staticpublicvoidmeth1()throwsMyException,YourException{……}}publicclassThrowException2{staticpublicvoidmeth2()throwsMyException,YourException{ ThrowException1.meth1();//不处理异常,而是通过异常列表转移。}}3、创建异常类创建异常类一般遵循如下规则:继承一个Exception类或者Exception的子类。在带参构造器中调用父类中带字符串参数构造器。并传递异常描述。至少创建一个缺省构造器与带字符串参数的带参构造器。在带参构造器中调用父类中带字符串参数构造器。并传递字符串异常描述。publicclassMyExceptionextendsException{ publicMyException(){super(“我的异常”);} publicMyException(Stringmsg){super(msg);}}4、异常类设计Java的异常结构体系中采用异常类,每个异常类本身表明了异常发生的原因与条件。这样对异常处理的时候直接、方便。所以一般建议程序员在应用程序中采用独立的异常类结构来处理应用程序的异常。这个异常类采用独立的继承扩展设计结构。每个模块有一个异常根类,其他异常都从该类扩展得到,并根据业务模块产生复杂的异常结构,该结构与系统框架结构应该是一致的。一般建议异常类最好继承Exception或者RuntimeException。第03节断言

知识点预览#节知识点难点重点应用3CORE-C06-03断言1、断言的语法

√√2、启用断言

√√3、禁用断言

√√4、使用断言的建议√√√1、断言的语法断言:是JDK1.4引入的代码调试机制。是一种错误抛出机制,在程序开发阶段用来调试代码,但编译成正式发布版本时可以屏蔽的语句。断言抛出的错误是AssertError类型。语句assert抛出的异常也是可以使用try处理的。语法:条件可以是任何逻辑表达式,当条件为false的时候,抛出AssertionError错误。assert条件; //第一种形式assert条件:表达式; //第二种形式,表达式可以是任意类型。2、启用断言默认情况下,JVM不启动断言,启动断言只需要在java或者javaw命令后使用选项-ea[:<packagename>...|:<classname>]-enableassertions[:<packagename>...|:<classname>]其中断言开启的粒度可以指定包路径,或者某些类。断言分成两种:由类加载器加载的类中断言使用-ea可以开启。由JVM直接加载的类中断言使用-esa|-enablesystemassertions可以开启。通常只需要-ea就足够。

3、禁用断言在java命令中使用选项关闭断言,默认断言是关闭的。-da[:<packagename>...|:<classname>]-disableassertions[:<packagename>...|:<classname>]关闭系统断言-dsa|-disablesystemassertions4、使用断言的建议前提:断言失败是致命的、不可恢复的错误。断言检查仅仅用在程序开发和测试阶段。结果断言仅仅应该在测试阶段用来定位程序内部错误。可以将断言语句作为方法的前置条件或后置条件来添加,也可以将其置于任何方法内,或放在if…else块和switch块中。assert关键字的唯一限制在于它必须位于可执行块中。对一个方法调用是否使用断言,应先看看该方法的文档。如果文档指明在某种情况下会抛出异常,那么对这种情况不需使用断言;如果文档指明一个限制条件,但没有说明违反该条件会抛出异常,此时就可以使用断言断言不应该以任何方式改变程序的状态断言可以用于验证传递给private方法的参数。不过,断言不应该用于验证传递给public方法的参数,因为不管是否启用了断言,public方法都必须检查其参数。不过可以在public方法中或者非public方法中利用断言测试后置条件。第04节日志记录

知识点预览#节知识点难点重点应用4CORE-C06-04日志记录1、全局日志记录

√√2、自定制日志记录器

√√3、日志管理器配置

√√1、全局日志记录-1日志系统是一种不可或缺的跟踪调试工具:特别是在任何无人职守的后台程序以及那些没有跟踪调试环境的系统中有着广泛的应用。长期以来,日志系统作为一种应用程序服务,对于跟踪调试、程序状态记录、崩溃数据恢复都有非常现实的意义。常见日志系统:Log4j:最早的Java日志记录框架之一,Apache的一个开放源代码项目,通过使用Log4j,可以控制日志信息输出的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器等,也可以控制每一条日志输出的格式。JDK1.4LoggingFramework继Log4j之后,JDK标准委员会将Log4j的基本思想吸收到了JDK当中,在JDK1.4中发布了第一个日志框架接口,并且提供了很简单的实现。CommonsLoggingFramework该框架同样是Apache基金会的项目,其出现的目的是为了整合Java项目中的JDK1.4LoggingFramework框架以及Log4j,使得应用程序可以在这两种框架上进行随意切换,因此该框架提供了比较统一的调用接口和配置方法。1、全局日志记录-2Logger是日志系统的主体对象。Handler对象从Logger中获取日志信息,并且将这些信息导出,它可以将这些信息写入控制台或者文件,也可以将这些信息发送到网络日志服务器上,或者转发到其他操作系统日志中。如果要禁用Handler,就直接使用setLevel(Level.OFF)来操作,并且可以根据适当的级别来重新启用。Filter是一个接口,对日志记录进行过滤Formatter为格式化LogRecords提供支持。1、全局日志记录-3JDK中日志主要类是Logger。创建Logger对象:(单子模式)输出日志信息staticLoggergetLogger(Stringname)staticLoggergetLogger(Stringname,StringresourceBundleName)voidlog(Levellevel,Stringmsg)voidlog(Levellevel,Stringmsg,Objectparam1)voidlog(Levellevel,Stringmsg,Object[]params)voidlog(Levellevel,Stringmsg,Throwablethrown)voidlog(LogRecordrecord)1、全局日志记录-4Level的日志级别:SEVERE(highestvalue)WARNINGINFOCONFIGFINEFINERFINEST(lowestvalue)LogRecord日志记录LogRecord(Levellevel,Stringmsg)1、全局日志记录-5方法log这种方法带有日志级别、消息字符串以及可选的字符串参数;方法logp:带有显示的源类名称和方法名称;方法logrb带有显示的本地化日志消息使用的资源包名称;跟踪方法

entering方法、exiting方法、throwing方法;一些便捷方法severe,warning,info

2、自定制日志记录器定制Filter与Formatter。Filter的接口方法:Formatter的抽象方法:Filter可以在Logger中绑定,也可以在Handler中绑定。Formatter只能与Handler绑定。由于Handler可以相互传递形成Handler链。booleanisLoggable(LogRecordrecord)abstractStringformat(LogRecordrecord)3、日志管理器配置-1LogManager在整个日志框架里面,存在一个单一的全局LogManager对象,它可以用于维护Logger和日志服务的一组共享状态。LogManager的作用:管理Logger对象的层次结构名称空间,所有指定

温馨提示

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

评论

0/150

提交评论