




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
异常及其处理办法异常及其处理办法1前言“未被检测到的错误将可能被忽略.”——引自一家领先计算公司的技术文档“在真的开始编程时我才发现,它比预想的难多了.忽然我意识到:我生命中的大多数时间都要花在查找自己程序的错误上了.”——MauricecWilkes谁不希望自己一路顺风?谁不希望一夜间盖起高楼大厦,造出航天飞机?但幻想代替不了现实.最现实的做法是未雨绸缪,防患于未然.前言“未被检测到的错误将可能被忽略.”——引自一家领先计算公2
制定异常处理策略,应随机应变地解决各类问题。制定异常处理策略,应随机应变地解决各类问题。3Java异常处理机制ThrowableError
(unchecked)ExceptionIOException(checked)RuntimeException
(unchecked)Java异常处理机制ThrowableError
(unch4Throwable类Throwable类是Java语言中所有错误或异常的超类。在java程序设计语言中,异常对象都是派生于Throwable类的一个实例。如果java中内置的异常类不能满足需求,用户还可以创建自己的异常类。Throwable类Throwable类是Java语言5Error类Error类层次结构描述了java运行时系统的内部错误和资源耗尽错误。如果出现这样的内部错误,除了通知用户,并尽力使程序安全地终止外,再无能为力。不过这样的情况很少出现Error类Error类层次结构描述了java运行时系统的内6Exception类Java程序设计的时候将Exception划分成两个分支:一支为曾经能够正确运行,而由于某些情况导致的异常属于IOException。另一支由程序错误导致的异常属于RuntimeException。Exception类Java程序设计的时候将Exceptio7IOException类包含以下情况:试图在文件尾部后面读取数据。试图打开一个错误格式的URLIOException类包含以下情况:8RuntimeException类包含下面情况:错误的类型转换。数组访问越界。访问空指针。如果出现RuntimeException异常,就一定是你的问题RuntimeException类包含下面情况:如果出现Ru9以下为RuntimeException异常:NullPointerException空指针异常IndexOutOfBoundsException指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数。更多RuntimeException异常查看API帮助文档以下为RuntimeException异常:NullPoin10抛出异常找到一个合适的异常类创建这个类的一个对象将对象抛出抛出异常找到一个合适的异常类11例如:
StringreadData(InputStreaminput)throwsIOException
{
throw
newIOException();}抛出异常的格式1例如:抛出异常的格式112例如:publicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{…}抛出异常的格式2例如:抛出异常的格式213捕获异常必须设置try/catch语句块,try语句块的简单形式如下:
try{codemorecodemorecode}catch(ExceptionTypee)
{handlerforthistype}捕获异常必须设置try/catch语句块,try语句块的简14如果try语句块中任何代码抛出一个在catch子句中指定的异常类,那么程序将跳过try语句块中的其余代码。程序将执行catch子句中的处理器代码。如果try语句块中任何代码抛出一个在catch子句中指定的异15演示代码:publicvoidread(StringfileName){try {InputStreamin=newFileInputStream(fileName);intb;while((b=in.readLine())!=-1){processinput}}catch(IOExceptione){e.printStackTrace();}}演示代码:16捕获多个异常try{code}catch(exceptiontypee1){}catch(exceptiontypee2){}catch(exceptiontypee3){}捕获多个异常try17
不论后面跟着多少个catch都一样,try-catch语句是这样执行的:首先逐个从上到下执行try块中的java语句,如果没有发生异常,则执行完try块后跳过catch块(不论有多少个catch都跳过)。如果try块中某条语句存在异常,则跳到相对应的catch块中(发生什么异常,就跳到什么catch里,如果没有准确对应的,就跳到父类异常的catch中),执行完该catch块中的语句,然后跳过其它的catch块,接着往下走。不论后面跟着多少个catch都一样,try-catc18Finally子句
try{//1codethatmightthrowexceptions//2}catch(IOExceptione){//3showerrordialog//4}finally{//5}Finally子句try19以下3种情况会执行finally子句:代码没有抛出异常。在这种情况下,程序首先执行try语句块中的全部代码,然后执行finally子句中的代码。代码抛出一个在catch子句中捕获的异常。程序执行try语句块中的所有代码,直到发生异常为止。此时,将跳过try语句块中剩余的代码,而转去执行与该异常匹配的catch子句中的代码,最后执行finally子句中的代码。代码抛出了一个异常,但这个异常不是由catch子句捕获。在这个情况下,程序将执行try语句块中所有语句,直到有异常被抛出为止。此时,将跳过try语句块中剩余代码,然后执行finally子句中的代码。并将异常抛给这个方法的调用者。以下3种情况会执行finally子句:20finally子句无论在try语句块中是否遇到异常,finally子句中的代码块都会被执行。finally子句无论在try语句块中是否遇到异常,fina21空指针异常Java.lang.NullPointerException由RuntimeException派生出来,是一个运行级别的异常。意思是说可能会在运行的时候才会被抛出,而且需要看这样的运行级别异常是否会导致你的业务逻辑中断。
空指针异常Java.lang.NullPointerExce22出现空指针异常原因:使用了未初始化的对象,并调用其方法(虽然已经声明)例如:Strings=null;//对象s为空(null)intlength=s.length();//发生空指针异常。是数据库查询时出现了查询为空的项目,却也依然引用其变量。将null作为一个数组,获得其长度。例如:
String[]array=null;intlength=array.length;出现空指针异常原因:使用了未初始化的对象,并调用其方法(虽然23用一句最朴实的话形容:就是你拿空的对象去做有实例的对象做的事情。用一句最朴实的话形容:就是你拿空的对象去做有实例的对象做24解决方案检查到对象为空时,设置对象值为空字符串或一个默认值。检测到对象为空时,根本不执行某操作,直接跳转到其他处理中。检查到对象为空时,提示用户操作有错误。解决方案检查到对象为空时,设置对象值为空字符串或一个默认值25处理方法一StringuserName=request.getParameter("username");
//该变量值为空时,转化为默认空字符串
If(userName==null)
{userName="";}
If(userName.equals(“root”))
{…}处理方法一StringuserName=request26处理方法二StringuserName=request.getParameter("username");
//该变量值为空时,转化为默认空字符串,不执行有关操作。
If(usreName!=null)
{
If(userName.equals("root"))
{....}
}处理方法二String27处理方法三StringuserName=request.getParameter("username");
//该变量值为空时,转化为默认空字符串,不执行有关操作。
If(usreName==null)
{
//提示用户输入信息为空
}处理方法三StringuserName=request28实际中,上面提供到三种处理方式也同样适用于其他异常的处理:
异常处理方式1)检查到异常出现,设置对象值为空字符串或一个默认值;
异常处理方式2)检测到异常出现,根本不执行某操作,直接跳转到其他处理中。
异常处理方式3)检查到异常出现,提示用户操作有错误。实际中,上面提供到三种处理方式也同样适用于其他异常的处理:
29个人建议:使用equals时尽量使用常量比对变量,慎用变量比对常量。
个人建议:使用equals时尽量使用常量比对变量,慎用变量比30如:
Stringok=null; if(ok.equals("ok"))//会抛异常
{ System.out.println("true"); } else { System.out.println("false"); }改成:
if("ok".equals(ok))//不会抛异常
{ System.out.println("true"); } else { System.out.println("false"); }如:31总结不管是在程序中遇见异常情况,还是在生活中遇见异常情况,能处理的处理,不能处理的及时上抛或者上报。总结不管是在程序中遇见异常情况,还是在生活中遇见异常情32谢谢各位观看!作者:RAY制作日期:2009-04-12谢谢各位观看!作者:RAY33异常及其处理办法异常及其处理办法34前言“未被检测到的错误将可能被忽略.”——引自一家领先计算公司的技术文档“在真的开始编程时我才发现,它比预想的难多了.忽然我意识到:我生命中的大多数时间都要花在查找自己程序的错误上了.”——MauricecWilkes谁不希望自己一路顺风?谁不希望一夜间盖起高楼大厦,造出航天飞机?但幻想代替不了现实.最现实的做法是未雨绸缪,防患于未然.前言“未被检测到的错误将可能被忽略.”——引自一家领先计算公35
制定异常处理策略,应随机应变地解决各类问题。制定异常处理策略,应随机应变地解决各类问题。36Java异常处理机制ThrowableError
(unchecked)ExceptionIOException(checked)RuntimeException
(unchecked)Java异常处理机制ThrowableError
(unch37Throwable类Throwable类是Java语言中所有错误或异常的超类。在java程序设计语言中,异常对象都是派生于Throwable类的一个实例。如果java中内置的异常类不能满足需求,用户还可以创建自己的异常类。Throwable类Throwable类是Java语言38Error类Error类层次结构描述了java运行时系统的内部错误和资源耗尽错误。如果出现这样的内部错误,除了通知用户,并尽力使程序安全地终止外,再无能为力。不过这样的情况很少出现Error类Error类层次结构描述了java运行时系统的内39Exception类Java程序设计的时候将Exception划分成两个分支:一支为曾经能够正确运行,而由于某些情况导致的异常属于IOException。另一支由程序错误导致的异常属于RuntimeException。Exception类Java程序设计的时候将Exceptio40IOException类包含以下情况:试图在文件尾部后面读取数据。试图打开一个错误格式的URLIOException类包含以下情况:41RuntimeException类包含下面情况:错误的类型转换。数组访问越界。访问空指针。如果出现RuntimeException异常,就一定是你的问题RuntimeException类包含下面情况:如果出现Ru42以下为RuntimeException异常:NullPointerException空指针异常IndexOutOfBoundsException指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数。更多RuntimeException异常查看API帮助文档以下为RuntimeException异常:NullPoin43抛出异常找到一个合适的异常类创建这个类的一个对象将对象抛出抛出异常找到一个合适的异常类44例如:
StringreadData(InputStreaminput)throwsIOException
{
throw
newIOException();}抛出异常的格式1例如:抛出异常的格式145例如:publicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{…}抛出异常的格式2例如:抛出异常的格式246捕获异常必须设置try/catch语句块,try语句块的简单形式如下:
try{codemorecodemorecode}catch(ExceptionTypee)
{handlerforthistype}捕获异常必须设置try/catch语句块,try语句块的简47如果try语句块中任何代码抛出一个在catch子句中指定的异常类,那么程序将跳过try语句块中的其余代码。程序将执行catch子句中的处理器代码。如果try语句块中任何代码抛出一个在catch子句中指定的异48演示代码:publicvoidread(StringfileName){try {InputStreamin=newFileInputStream(fileName);intb;while((b=in.readLine())!=-1){processinput}}catch(IOExceptione){e.printStackTrace();}}演示代码:49捕获多个异常try{code}catch(exceptiontypee1){}catch(exceptiontypee2){}catch(exceptiontypee3){}捕获多个异常try50
不论后面跟着多少个catch都一样,try-catch语句是这样执行的:首先逐个从上到下执行try块中的java语句,如果没有发生异常,则执行完try块后跳过catch块(不论有多少个catch都跳过)。如果try块中某条语句存在异常,则跳到相对应的catch块中(发生什么异常,就跳到什么catch里,如果没有准确对应的,就跳到父类异常的catch中),执行完该catch块中的语句,然后跳过其它的catch块,接着往下走。不论后面跟着多少个catch都一样,try-catc51Finally子句
try{//1codethatmightthrowexceptions//2}catch(IOExceptione){//3showerrordialog//4}finally{//5}Finally子句try52以下3种情况会执行finally子句:代码没有抛出异常。在这种情况下,程序首先执行try语句块中的全部代码,然后执行finally子句中的代码。代码抛出一个在catch子句中捕获的异常。程序执行try语句块中的所有代码,直到发生异常为止。此时,将跳过try语句块中剩余的代码,而转去执行与该异常匹配的catch子句中的代码,最后执行finally子句中的代码。代码抛出了一个异常,但这个异常不是由catch子句捕获。在这个情况下,程序将执行try语句块中所有语句,直到有异常被抛出为止。此时,将跳过try语句块中剩余代码,然后执行finally子句中的代码。并将异常抛给这个方法的调用者。以下3种情况会执行finally子句:53finally子句无论在try语句块中是否遇到异常,finally子句中的代码块都会被执行。finally子句无论在try语句块中是否遇到异常,fina54空指针异常Java.lang.NullPointerException由RuntimeException派生出来,是一个运行级别的异常。意思是说可能会在运行的时候才会被抛出,而且需要看这样的运行级别异常是否会导致你的业务逻辑中断。
空指针异常Java.lang.NullPointerExce55出现空指针异常原因:使用了未初始化的对象,并调用其方法(虽然已经声明)例如:Strings=null;//对象s为空(null)intlength=s.length();//发生空指针异常。是数据库查询时出现了查询为空的项目,却也依然引用其变量。将null作为一个数组,获得其长度。例如:
String[]array=null;intlength=array.length;出现空指针异常原因:使用了未初始化的对象,并调用其方法(虽然56用一句最朴实的话形容:就是你拿空的对象去做有实例的对象做的事情。用一句最朴实的话形容:就是你拿空的对象去做有实例的对象做57解决方案检查到对象为空时,设置对象值为空字符串或一个默认值。检测到对象为空时,根本不执行某操作,直接跳转到其他处理中。检查到对象为空时,提示用户操作有错误。解决方案检查到对象为空时,设置对象值为空字符串或一个默认值58处理方法一StringuserName=request.getParameter("username");
//该变量值为空时,转化为默认空字符串
If(userName==null)
{userName="";}
If(userName.equals(“root”))
{…}处理方法一StringuserName=request59处理方法二StringuserName=request.getParam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度暖气片行业展会参展与合作合同范本
- 2025年度社区生鲜肉类配送服务合同协议
- 2025年度车辆抵押贷款合同备案合同
- 2025年度自建房房屋租赁合同模板(含租赁合同执行)
- 二零二五年度企业工伤后续治疗保障合同范本
- 二零二五淘宝商家入驻平台入驻资格审查合同
- 2025年度达人品牌代言合作协议范本
- 2025年度联合体投标协议书-文化旅游产业联合体投标协议
- 二零二五年度全民健身中心兼职教练员服务合同
- 2025年度银行转账跨境支付安全协议
- 工程施工联系单范文全部
- 脊髓压迫症A吴绍勇
- FMEA第五版表格(实例)
- 【讲座】情境性试题:基于《中国高考评价体系》的高考语文命题研究
- 环保考核试卷18285(含答案)
- SMED培训材料-快速换模
- HG20592-2009法兰(PL)法兰盖(BL)精加工尺寸
- 叉车蓄电池容量与铁箱规格表
- 风管、水管支架估算表
- 浅谈小学低年级数学计算课堂教学的有效策略
- scratch趣味编程社团活动方案活动计划
评论
0/150
提交评论