版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
江苏理工学院第7章异常处理—让云医院系统更加稳健时间:主讲人:2025.62025异常处理机制:确保云医院系统稳定运行自定义异常:增强云医院系统的异常处理能力内部类目录CONTENTS异常处理机制:确保云医院系统稳定运行Part.01江苏理工学院异常分类Java将异常分为捕获异常和未捕获异常。Error类异常通常指JVM重大问题,如内存溢出,程序无法处理。Exception类异常是运行时问题,可通过try-catch-finally处理。常见异常类表7-1列举了常见系统异常类,如ArithmeticException(算术异常)、ArrayIndexOutOfBoundsException(数组下标越界异常)、NullPointerException(空指针异常)等。Java中常见的系统异常类型【例7-1】publicclassRuntimeExceptionExample{publicstaticvoidmain(String[]args){int[]numbers={1,2,3};//尝试访问不存在的索引(数组长度=3,有效索引为0-2)System.out.println(numbers[3]);//触发异常}}常见的异常类型异常类名称异常类含义ArithmeticException算术异常类ArrayIndexOutOfBoundsException数组下标越界异常类ArrayStoreException将与数组类型不兼容的值赋给数组元素时抛出的异常类ClassCastException类型强制转换异常类ClassNotFoundException未找到指定类异常类EOFException文件已结束异常类FileNotFoundException文件未找到异常类IOException输入/输出异常类NegativeArraySizeException建立元素个数为负数的数组异常类NullPointerException空指针异常类NumberFormatException字符串转换为数字异常类SQLException操作数据库异常类StringIndexOutOfBoundsException字符串索引超出范围异常表7-1常见的系统异常类多重异常处理当有多个catch语句时,只会匹配其中一个异常类并执行catch块,匹配顺序由上到下。如果在catch块中抛出异常,则finally之外的语句将不被执行。try-catch-finally格式异常处理采用统一机制。try块包含可能引发异常的代码,catch块捕获并处理异常,finally块无论是否发生异常都会执行,用于资源释放或清理工作。语法格式:try{…//程序块}catch(异常类
对象名称){…//异常发生时的处理语句}finally{
…//无论是否出现异常都要执行的代码}异常捕获与处理【例7-2】程序异常分析。publicclassExanple_exception{publicstaticvoidmain(String[]args)throwsException{ try{ Scannerscanner=newScanner(System.in); inta=scanner.nextInt(); intb=scanner.nextInt(); intc[]={5,6,7,8,9}; System.out.println(26/a); System.out.println(c[b]); } catch(ArithmeticExceptionex1){ System.out.println("被零除:"+ex1); throwex1; } catch(ArrayIndexOutOfBoundsExceptionex2){ System.out.println("数组下标越界:"+ex2); } finally{ System.out.println("肯定会执行的语句!"); } System.out.println("主程序正常结束!"); }}案例分析如果输入0和1,程序运行结果如图7所示。如果输入1和6,程序运行结果如图所示。案例运行结果在云医院系统中,有一个用于获取患者信息的方法。这个方法需要从一个患者对象中获取患者的姓名。如果传入的患者对象是null,那么会引发NullPointerException。思考:如何设计实现对患者信息异常的监听和捕获?场景分析0102抛出异常程序可通过throw关键字抛出异常,条件可通过if语句实现。如果抛出的是检查异常,则需在方法头部声明抛出异常类型。thrownewException();声明抛出异常类型在成员方法头部,通过throws关键字声明方法可能抛出的已检查异常。调用者需捕获处理抛出的异常。Typemethodname(parameterlist)throwsexception1,exception2,…,exceptionn{}throw和throws语句publicclassPeople{ intage; publicintcheck(Stringstr)throwsException{ age=Integer.parseInt(str); if(age<0) thrownewException("年龄不能为负数!"); returnage; } publicstaticvoidmain(String[]args){ Peoplep=newPeople();//由于下面调用可能抛出异常的方法check(),因此需要用try-catch捕获 try{ intmyage=p.check("-45"); System.out.println(myage); }catch(Exceptione){ System.out.println("数据逻辑错误!"); System.out.println("原因:"+e.getMessage()); } }}案例分析【例7-3】创建People类,该类中的check方法首先将传递进来的String类型的参数转换成int型,检查int型整数是否为负数,若为负数则抛出异常;然后在该类的main方法中捕获异常并处理。自定义异常:增强云医院系统的异常处理能力Part.02江苏理工学院自定义异常类必须继承Throwable类,通常是继承Exception类或其子类。可用于云医院系统中任何需要监控和管理内存使用的场景,以帮助开发人员更好地控制内存资源,如可以定义防止内存溢出异常,用于检测以防止系统崩溃或性能下降。在CloudHospitalSystem类中,通过loadDataToMemory方法模拟加载数据到内存,并检查内存使用量是否超过最大值。如果超过,则抛出DataMemoryOverflowException,并在main方法中捕获处理。自定义异常类异常抛出与捕获0102数据内存溢出处理0102【例7-4】设计一个简单的自定义异常类DataMemoryOverflowException,用于防止云医院系统中的数据内存溢出。publicclassDataMemoryOverflowExceptionextendsRuntimeException{//默认构造函数
publicDataMemoryOverflowException(){super("Datamemoryoverflowoccurred!");}
//带错误消息的构造函数
publicDataMemoryOverflowException(Stringmessage){super(message);}
//可选:带错误消息和原因的构造函数
publicDataMemoryOverflowException(Stringmessage,Throwablecause){super(message,cause);}
//可选:仅带原因的构造函数
publicDataMemoryOverflowException(Throwablecause){super(cause);}}自定义异常案例分析0202/*使用这个自定义异常类时,可以在检测到内存溢出风险的情况时抛出它,如在处理大量数据或进行内存密集型操作时*/publicclassCloudHospitalSystem{privatestaticfinallongMAX_MEMORY_USAGE=1024*1024*100;publicstaticvoidmain(String[]args){try{//模拟加载数据到内存
loadDataToMemory();}catch(DataMemoryOverflowExceptione){//捕获并处理内存溢出异常
System.out.println("CaughtDataMemoryOverflowException:"+e.getMessage());//执行必要的清理或恢复操作
}}publicstaticvoidloadDataToMemory()throwsDataMemoryOverflowException{//模拟内存使用情况
longcurrentMemoryUsage=getCurrentMemoryUsage();//检查是否超过最大内存使用量
if(currentMemoryUsage>MAX_MEMORY_USAGE){//抛出内存溢出异常
thrownewDataMemoryOverflowException("Currentmemoryusageexceedsthemaximumlimit!");}//继续处理数据}//一个模拟的方法,用于获取当前内存使用量
//在实际应用中,用户可能需要使用更精确的方法来监控内存使用
privatestaticlonggetCurrentMemoryUsage(){//这里返回一个模拟的内存使用量值
return512*1024*80;//假设当前使用了80MB内存
}}自定义异常案例分析在患者信息存储过程中,如果系统检测到存储空间不足、存储服务不可用或达到存储限制等异常情况,应设计对应的异常捕获。患者信息存储异常01在患者信息读取过程中,如果系统无法找到所请求的患者信息、读取服务不可用或存在访问权限问题等异常情况,同样需要捕获异常。患者信息读取异常02信息存储与读取异常分析//1、构建自定义异常类publicclassStorageAccessExceptionextendsException{publicStorageAccessException(){super("Storageaccesserroroccurred!");}
publicStorageAccessException(Stringmessage){super(message);}
publicStorageAccessException(Stringmessage,Throwablecause){super(message,cause);}
publicStorageAccessException(Throwablecause){super(cause);}}【例7-5】设计自定义异常类StorageAccessException,实现存储或读取患者信息时检测抛出该异常。案例分析//2、创建一个模拟的云医院信息存储与读取的类PatientDataStorage,并在其中模拟异常抛出publicclassPatientDataStorage{privateMap<Integer,String>patientData=newHashMap<>();publicvoidstorePatientData(intpatientId,Stringdata)throwsStorageAccessException{if(patientData.size()>=10){//假设最大存储10条记录
thrownewStorageAccessException("Storageisfull,cannotstoremoredata!");}patientData.put(patientId,data);System.out.println("Patientdatastoredsuccessfully.");}publicStringreadPatientData(intpatientId)throwsStorageAccessException{if(!patientData.containsKey(patientId)){thrownewStorageAccessException("Patientdatanotfound!");}
returnpatientData.get(patientId);}}【例7-5】设计自定义异常类StorageAccessException,实现存储或读取患者信息时检测抛出该异常。案例分析//3、创建一个主类来演示如何使用PatientDataStorage类publicclassCloudHospitalApp{publicstaticvoidmain(String[]args){PatientDataStoragestorage=newPatientDataStorage();try{//存储患者信息
storage.storePatientData(1,"Patient1data");storage.storePatientData(2,"Patient2data");//尝试存储超过最大容量的数据,应该抛出StorageAccessExceptionstorage.storePatientData(11,"Patient11data");}catch(StorageAccessExceptione){System.out.println("CaughtStorageAccessException:"+e.getMessage());//处理异常,如记录日志、通知用户等
}try{Stringdata=storage.readPatientData(1);System.out.println("Readpatientdata:"+data);//尝试读取不存在的数据,应该抛出StorageAccessExceptiondata=storage.readPatientData(99);}catch(StorageAccessExceptione){System.out.println("CaughtStorageAccessException:"+e.getMessage());//处理异常,如记录日志、通知用户等
}}}案例分析创建了一个PatientDataStorage类来模拟患者信息的存储与读取。定义了两个方法storePatientData和readPatientData,它们分别用于存储和读取患者信息,并在特定情况下抛出StorageAccessException。在CloudHospitalApp主类中,演示了如何使用PatientDataStorage类,捕获并处理可能抛出的StorageAccessException。因此,使用自定义的异常类的最大优点就是当开发人员需要自己开发实现某些规则、功能的代码时,一旦情况不满足要求,可以向外抛出自己的异常,对调用者而言非常方便,提高了程序的健壮性与代码的可读性,这种开发方式一劳永逸。案例分析内部类Part.03在其他类中定义的类称为内部类。内部类具有独立的命名空间,可随意使用外部类的成员方法和变量,即使这些成员被修饰为private。内部类定义示例代码中定义了OuterClass类和其成员内部类InnerClass。InnerClass可直接访问外部类的私有成员,并可通过外部类的方法调用内部类的方法。成员内部类内部类的概念案例分析【例7-6】创建成员内部类的实例对象。publicclassOuterClass{ privateintx; InnerClassin=newInnerClass(); publicvoidouf(){ in.inf(); } classInnerClass{ inty=x+2; //可以直接访问外部类的私有成员 publicvoidinf(){ } } publicInnerClassdoit(){ in.y=in.y+2; returnin; } publicstaticvoidmain(Stringargs[]){ OuterClassout=newOuterClass(); System.out.println(out.in.y); out.in=out.doit(); System.out.println(out.in.y); }}示例代码中创建了一个匿名内部类对象v,实现了Vehicle接口,并定义了drive方法。接口式匿名内部类示例代码中创建了一个匿名内部类对象car,继承自Car类,并重写了drive方法。继承式匿名内部类匿名内部类是一种特殊的局部内部类,定义时没有名字。可通过new类名或接口名()的方式创建匿名内部类对象。new类名或接口名(){
匿名类的类体}匿名内部类定义匿名内部类案例分析比较【例7-7】继承式的匿名内部类举例。publicclassCa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高职第一学年(陶瓷设计与工艺)陶瓷装饰设计阶段测试试题及答案
- 大学(金融学)金融市场学2026年阶段测试题及答案
- 2025年大学信息资源管理(信息管理学)试题及答案
- 2025年大学物理(光学原理)试题及答案
- 2025年中职生物学(生物基础知识)试题及答案
- 2025年大学本科(法学)法律文书写作综合测试题及答案
- 2026年综合测试(植物保护常识)考题及答案
- 2025年高职音乐(作曲基础理论)试题及答案
- 2025年大学(基础医学)生理学实验阶段测试题及解析
- 2025年大学宝石及材料工艺学(宝石工艺技巧)试题及答案
- 2025年甘肃省武威市凉州区大柳镇选聘专业化管理大学生村文书笔试考试备考试题及答案解析
- 2025内蒙古润蒙能源有限公司招聘22人考试笔试备考试题及答案解析
- 虚拟现实行业 VR 全景拍摄师岗位招聘考试试卷及答案
- 关于拖拉机课件
- 江西专升本《信息技术》核心知识点考试复习题库(含答案)
- 2025-2026学年人教鄂教版三年级科学上册(全册)教学设计(附目录)
- 2025国家开放大学《小学语文教学研究》形考任务1-5答案
- 回族做礼拜的念词集合6篇
- 中南大学轻金属冶金学Ⅰ-Mg冶金部分
- 固定资产、低值易耗品报损流程图
- 双横臂独立悬架设计
评论
0/150
提交评论