版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计语言概述8.1异常处理与异常类8.1异常处理与异常类
在Java程序设计中,异常处理是一种用于处理程序运行时可能出现的错误和异常情况的机制。通过异常处理,可以捕获和处理错误,从而提高程序的健壮性和可靠性。01try
catch语句01try
catch语句
在Java中,异常处理是程序设计中非常重要的一部分。异常是指程序运行过程中出现的不正常情况,例如试图访问数组的非法索引、试图打开一个不存在的文件等。为了处理这些异常情况,Java提供了异常处理机制,其中最核心的就是try-catch语句。try-catch的语法结构如下:try{//可能会抛出异常的代码}catch(ExceptionType1e1){//处理ExceptionType1类型异常的代码}catch(ExceptionType2e2){//处理ExceptionType2类型异常的代码}finally{//不管是否发生异常,都会执行的代码}01try
catch语句主要用于包裹可能会抛出异常的代码。如果在try块中发生了异常,程序会中断try块的执行,并跳转到catch块进行处理。是可选的,无论是否发生异常,finally块中的代码都会被执行。通常用于释放资源,如关闭文件流、数据库连接等。主要用于捕获并处理异常。每个catch块都对应一个特定类型的异常,当try块中抛出的异常类型与catch块中的异常类型匹配时,就会执行该catch块中的代码。可以有多个catch块来处理不同类型的异常。try语句块catch语句块finally语句块01try
catch语句在下面这段代码中,通过try-catch语言块,处理数学计算错误的异常:publicclassTryCatchExample{publicstaticvoidmain(String[]args){try{intresult=10/0;//这里会抛出ArithmeticException异常}catch(ArithmeticExceptione){System.out.println("发生了算术异常:"+e.getMessage());}finally{System.out.println("finally块被执行");}}}运行之后的结果为:发生了算术异常:/byzerofinally块被执行
在上述代码中,try块中尝试进行除以零的操作,这会抛出ArithmeticException异常。catch块捕获到了该异常,并打印出了异常信息。最后,finally块被执行,打印出了一条消息。02常用异常类02常用异常类Java提供了许多内置的异常类,这些异常类都继承自Throwable类。根据异常的性质,异常类可以分为两大类:Error类和Exception类。02常用异常类Error类Error类是Throwable的子类,用于表示程序运行过程中出现的严重错误。这些错误通常是由于系统资源不足、JVM错误或其他不可恢复的问题引起的。
与Exception不同,Error通常不需要程序员显式捕获或处理,因为它们表明程序已经处于不可恢复的状态。这些错误通常是无法恢复的,程序也无法对其进行处理。以下是一些常见的Error类及其描述:02常用异常类
这是Error的一个子类,表示与虚拟机相关的错误。以下是一些常见的子类:(1)OutOfMemoryError:它表示JVM内存不足,无法分配更多内存。一般在程序中存在内存泄漏的时候,或者程序试图分配的内存超过了JVM的最大堆大小的时候会引该错误。例如:运行此代码时,JVM的堆内存会被逐渐填满,最终抛出OutOfMemoryError。publicclassOutOfMemoryErrorExample{publicstaticvoidmain(String[]args){List<Object>list=newArrayList<>();while(true){list.add(newObject());}}}1.VirtualMachineError02常用异常类(2)StackOverflowError:
该错误类型表示线程的堆栈溢出,通常是由于递归调用过深导致的。比如递归函数没有正确的退出条件;程序逻辑错误导致无限递归等情况都会触发该错误。例如:运行此代码时,会抛出StackOverflowError。publicclassStackOverflowErrorExample{publicstaticvoidmain(String[]args){recursiveFunction();}publicstaticvoidrecursiveFunction(){recursiveFunction();//无限递归}}1.VirtualMachineError02常用异常类(3)NoClassDefFoundError:
该类型的错误表示在运行时无法找到某个类的定义。一般常见于类路径中缺少某个类;类加载器加载了错误的类;类在编译时存在,但在运行时被删除或移动等情况时会产生。例如:如果MyClass类在运行时不存在,会抛出NoClassDefFoundError。publicclassNoClassDefFoundErrorExample{publicstaticvoidmain(String[]args){MyClassmyClass=newMyClass();//假设MyClass类不存在}}1.VirtualMachineError02常用异常类
这是Error的一个子类,表示与类加载和链接相关的错误。以下是一些常见的子类:(1)IncompatibleClassChangeError:表示某个类在运行时与编译时的结构不一致。一般在类的继承关系或接口实现关系发生了变化;类的字段或方法被删除或修改时产生。运行此代码时,可能会抛出IncompatibleClassChangeError。publicclassIncompatibleClassChangeErrorExample{publicstaticvoidmain(String[]args){MyInterfacemyObject=newMyClass();myObject.method();//假设MyClass中没有实现method方法}}interfaceMyInterface{voidmethod();}classMyClass{//MyClass没有实现MyInterface的method方法}2.LinkageError02常用异常类(2)NoSuchFieldError:
表示在运行时无法找到某个字段。一般在字段在运行时被删除或重命名;类加载器加载了错误的类时会产生此类错误。例如:运行此代码时,会抛出NoSuchFieldError。publicclassNoSuchFieldErrorExample{publicstaticvoidmain(String[]args){MyClassmyClass=newMyClass();myClass.field=10;//假设MyClass中没有field字段}}classMyClass{//MyClass中没有定义field字段}2.LinkageError02常用异常类(3)NoSuchMethodError:
表示在运行时无法找到某个方法。一般常见于方法在运行时被删除或重命名;类加载器加载了错误的类等场景下产生。例如:运行此代码时,会抛出NoSuchMethodError。publicclassNoSuchMethodErrorExample{publicstaticvoidmain(String[]args){MyClassmyClass=newMyClass();myClass.method();//假设MyClass中没有method方法}}classMyClass{//MyClass中没有定义method方法}2.LinkageError02常用异常类
此类错误表示线程被终止。一般常见于调用了Thread.stop()方法(已废弃);或者线程被强制终止的情况。例如:运行此代码时,线程会被终止,并抛出ThreadDeath。publicclassThreadDeathExample{publicstaticvoidmain(String[]args){Threadt=newThread(()->{while(true){System.out.println("线程正在运行");}});t.start();t.stop();//强制终止线程}}3.ThreadDeath02常用异常类
这类错误表示断言失败。一般在使用了assert语句,并且断言条件为false时候产生。运行此代码时,会抛出AssertionError。publicclassAssertionErrorExample{publicstaticvoidmain(String[]args){intx=10;assertx==20:"x不等于20";//断言失败}}4.AssertionError02常用异常类5.UnknownError此类型表示未知的错误。一般常见于JVM内部错误或系统资源不足的情况。6.InternalError此类型表示JVM内部错误。一般常见于JVM的实现存在缺陷或者系统资源不足的情况。7.SecurityError此类型表示安全相关的错误。一般常见于安全策略限制,比如安全管理器拒绝了某个操作就会产生此类错误。Error类表示程序运行过程中出现的严重错误,通常是由系统或JVM的问题引起的,而不是程序逻辑错误。虽然Error通常不需要显式捕获,但在某些情况下,了解这些错误的类型和原因可以帮助我们更好地调试和优化程序。02常用异常类Exception类Exception类表示程序运行过程中可以被处理的异常。根据是否需要显式捕获,Exception类又可以分为两类:RuntimeException类和非RuntimeException类。
RuntimeException类:这些异常通常是由程序逻辑错误引起的,例如空指针异常、数组越界异常等。这类异常不需要显式捕获,但可以通过良好的编程习惯避免它们的发生。常见的RuntimeException包括:
NullPointerException:表示试图访问一个空对象的成员。
ArrayIndexOutOfBoundsException:表示数组索引越界。
ArithmeticException:表示算术运算异常,如除以零。02常用异常类下面这段代码通过try-catch语句块捕获了算术异常。publicclassUncheckedExample{publicstaticvoidmain(String[]args){try{intresult=10/0;}catch(ArithmeticExceptione){System.out.println("算术异常:"+e.getMessage());}}}02常用异常类
非RuntimeException类:这些异常通常是由外部环境或资源引起的,例如文件找不到、网络连接失败等。这类异常需要显式捕获。常见的非RuntimeException包括:
IOException:表示输入输出异常,例如文件找不到、文件读写错误等。
SQLException:表示数据库操作异常。
ClassNotFoundException:表示找不到指定的类。下面这段代码通过try-catch语句块捕获了文件未找到的异常。publicclassCheckedExample{publicstaticvoidmain(String[]args){try{FileReaderfileReader=newFileReader("nonexistentfile.txt");}catch(FileNotFoundExceptione){System.out.println("文件未找到:"+e.getMessage());}}}03自定义异常类02常用异常类
如果Java内置的异常类无法完全满足需求,可以自定义异常类。自定义异常类需要继承自Exception类或其子类。自定义异常类的步骤有:1.首先,定义一个类,并使其继承自Exception类或其子类。2.接着,在类中可以添加构造方法、成员变量和方法等。通常会提供多个构造方法,以便在抛出自定义异常时可以传递不同的信息。例如:
Exception类是Java异常处理的基石,强制开发者对可恢复的错误进行显式管理。通过合理使用其子类(如自定义异常)和区分检查型与非检查型异常,可以构建健壮且清晰的错误处理机制。classInvalidAgeExceptionextendsException{publicInvalidAgeException(Stringmessage){super(message);}}publicclassCustomExceptionExample{publicstaticvoidmain(String[]args){try{intage=-5;if(age<0){thrownewInvalidAgeException("年龄不能为负数");}}catch(InvalidAgeExceptione){System.out.println("捕获到自定义异常:"+e.getMessage());}}}04项目演练04项目演练项目名称:食品安全智能溯源系统场景设计:某市市场监管局推出食品安全溯源系统,要求所有食品生产企业接入。系统要求:1.信息不可篡改:食品批次信息(生产日期、原料来源)一旦登记永久锁定2.全链路检测:从生产到销售各环节触发质量验证3.社会共治:企业自检、政府抽检、消费者监督三端协同04项目演练1.定义食品基类publicclassFood{privatefinalStringbatchNo;//生产批号(就像身份证号)privatefinalStringproduceDate;//生产日期(不可修改)publicFood(StringbatchNo,Stringdate){this.batchNo=batchNo;duceDate=date;}//质量检测(企业责任)publicvoidqualityCheck()throwsFoodException{if(isExpired()){//自动计算是否过期thrownewExpiredException(this);}}privatebooleanisExpired(){//假设生产日期超过30天算过期returndaysSinceProduce()>30;}}04项目演练2.自定义异常类//过期异常(红色警报)classExpiredExceptionextendsFoodException{ExpiredException(Foodfood){super(food.batchNo+"批次食品已过期!立即下架");}}//添加剂异常(黄色警告)classAdditiveExceptionextendsFoodException{AdditiveException(Stringname){super("检测到违规添加剂:"+name+"!禁止销售");}}04项目演练//牛奶类publicclassMilkextendsFood{publicMilk(StringbatchNo,Stringdate){super(batchNo,date);}@OverridepublicvoidqualityCheck()throwsFoodException{super.qualityCheck();//先检查是否过期
//额外检测三聚氰胺(假设5%不合格率)if(detectMelamine()){thrownewAdditiveException("三聚氰胺");}}privatebooleandetectMelamine(){returnMath.random()<0.05;}}//牛奶类publicclassMilkextendsFood{publicMilk(StringbatchNo,Stringdate){super(batchNo,date);}@OverridepublicvoidqualityCheck()throwsFoodException{super.qualityCheck();//先检查是否过期
//额外检测三聚氰胺(假设5%不合格率)if(detectMelamine()){thrownewAdditiveException("三聚氰胺");}}privatebooleandetectMelamine(){returnMath.random()<0.05;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年计算机技术实操考试题
- 2026年软考《网络工程师》高频考点题
- 2026年浙江省苏教版初中七年级英语上册第8单元写作练习
- 2026年诺如、流感等呼吸道传染病防控题库
- 2026年法考客观题试卷一真题及答案解析
- 枇杷止咳胶囊项目可行性研究报告
- 玉石展销园项目可行性研究报告
- 2027年代理人合同人事合同二篇
- 教师晋级述职报告
- 退役军人安置政策
- 微商行业分析2026报告
- 间隙感染的护理要点
- 2025年12月6日黑龙江省高级人民法院遴选加试真题及答案解析
- 2025中共杭州市委党校萧山区分校招聘事业人员1人备考题库附答案解析(夺冠)
- 护理教学查房的组织与实施试讲
- 2022供电营业厅标准化建设与改造项目管理手册
- Unit3FascinatingParks单词课件-高中英语人教版选择性
- 幼儿园食堂人员知识培训课件
- 软件安全测试预案
- 工厂防台风安全教育培训课件
- 重庆市中考英语历年卷分析报告
评论
0/150
提交评论