模块3 面向对象编程高级 --- 第十一章:异常处理

news/2024/11/15 18:40:04/文章来源:https://www.cnblogs.com/kuangmeng/p/18328320

第十一章 异常处理

主要知识点

  1、异常产生的原因

  2、标准异常类

  3、Java的异常处理机制

  4、异常的创建

  5、异常的抛出

  6、异常语句的编程

学习目标

  熟悉异常产生的原因和标准异常类的用法。能够运用异常处理机制编写Java程序,提高安全性;

11.1 异常的分类

  一旦出现异常,系统将会立刻中止程序的运行,并将控制权返回给操作系统,而此前分配的所有资源将继续保持原有状态,导致资源浪费。

11.1.1 异常的产生

  程序员在编写程序时,难免会出现一些问题,导致程序运行时出现一些非正常的现象,例如,死循环、非正常退出等。称为运行错误,根据错误性质分为两类:

  (1)致命性错误(Error):简称为错误,如程序进入死循环,递归无法结束等,错误只能在编译阶段解决,进行时程序本身无法解决;

  (2)非致命性错误(Exception):如运算时除数为0,打开一个不存在的文件等。这类现象称为异常。

  1、异常产生的原因:

  (1)JVM检测到非正常的执行状态,这些状态可能由以下情况引起:

    (1)表达式违反了Java语言的语义,如除数为0;

    (2)装入或链接程序时出错;

    (3)超出资源限制,如内存不足,这种异常是程序员无法预知的。

  (2)程序代码中的throws语句被执行。

  (3)因为代码段不同步而产生的,可能的原因是:

    (1)Thread(线程)的stop方法被调用;

    (2)JVM内部发生错误。

  2、异常的层次结构:

  Java程序的异常按照类的层次结构组织,所有异常类的父类是Throwable,它是Object类的直接子类,分为Error和Exception两个直接子类。而RuntimeException类是Exception类的直接子类。其中,Error类用来显示与系统本身有关的错误,其对象是由Java虚拟机生成并抛出;而Exception类是用来显示用户程序可能捕获的异常,也是用来创建用户异常类型子类的类,其对象由应用程序处理或抛出。  

             

11.1.2 Java定义的标准异常类

  这些标准异常类分为两种:RuntimeException和Exception,前者是运行时异常,属于不可检测的异常类,后者是可检测的异常类。Java定义的标准异常类见下图所示:

      

11.2 异常处理机制

  程序运行时如果发生异常,立即自动终止运行并输出提示信息,异常处理就是对所发生的异常进行处理,从而避免出现死机或者重启机器的现象。Java语言提供的异常处理机制,有助于找出异常类型并恢复它们。Java对于异常处理由两种:

  (1)通过try-catch语句处理异常,把可能发生异常的语句放在try语句中,catch捕获异常并处理。

  (2)把异常抛给上一层调用它的方法,由该方法进行异常处理或继续抛给上一层。

11.2.1 异常处理的语句结构

  Java语句提供的异常处理机制是:try-catch-finally语句块进行异常的监视、捕获和处理,也可以通过throws语句抛出异常。含有异常处理机制程序的一般结构是:

try{ ......}                 // 这里写被监视的代码段,一旦发生异常,则由catch代码处理
catch(异常类型 e){ ......}    // 待处理的第一种异常
catch(异常类型 e){ ......}    // 待处理的第二种异常
......
finally{......}              // 最终处理的代码段

11.2.2 Throwable类的常用方法

  Throwable是java.lang包中一个专门用来处理异常的类,Throwable类的方法均可以被其子类调用,用于显示异常类型、原因等信息。Throwable类的常用方法如下所示:

  (1)getCause():如果异常为空或者不存在或者不明,用它返回

  (2)getLocalizedMessage():返回本地化信息

  (3)getMessage():返回异常的原因

  (4)getStackTrace():返回堆栈跟踪信息

  (5)printStackTrace():打印堆栈的标准错误流

  (6)printStackTrace():打印堆栈的标准打印流

  (7)toString():// 返回简单描述;

  对于程序运行时出现了没有声明的异常,程序本身无法捕获这种异常,系统采用的方法是:依次向上递交,由上一级处理,上一级处理不了,在向更上一级,直到最后操作系统为止。

11.2.3 异常类的创建

  用户也可以创建自己的异常类,这种异常类一定是Exception或者Throwable的子类,因此,可以用建立类的语句来创建异常类,但需要集成某一个异常类。例如:

class 异常名 extends Exception{......}

  用户一旦定义了自己的异常类,在程序中就可以像标准的异常类一样使用。需要为自定义异常类设计构造方法,以便方便构造自定义异常对象。

11.3 异常的抛出

  所谓抛出异常,指的是在程序运行时如果出现异常,则执行相应的程序代码段,而不必让整个程序中止。因此需要有一段Java代码生成一个异常对象并把它抛弃。都可以通过throw语句或者是throws语句来实现抛出的。

11.3.1 throw语句

  throw语句的格式为:

throw ThrowableObject;

  其中ThrowableObject必须是Throwable类或其子类的对象。

11.3.2 throws语句

  throws语句用来表明一个方法可能抛出的所有异常,对于大多数Exception子类和自定义异常类来说,Java编译器会强迫程序员在方法的声明语句中表明抛出的异常类型。以便于通知调用这个方法的其他方法准备捕获此异常。

习题

一、简答题

  1、什么是异常?异常产生的原因有哪些?

  2、为什么Java的异常处理技术优于传统程序的异常处理技术?

  3、在Java代码中可用来处理异常的方式有哪些?

  4、如果发生了一个异常,但是没有找到适当的异常处理程序,则会发生什么情况?

  5、说明throw语句与throws语句有什么不同?

  6、在设计catch块处理不同的异常时,一般应注意哪些问题?

二、操作题

  1、编写一个程序,用来将作为命令行参数输入的值转换为数字,如果输入的值无法转换为数字,则程序应显示相应的错误信息,要求通过异常处理方法解决。

  2、编写一个程序,用于将来自用户的两个数字接收为命令行参数。将第一个数字除以第二个数字并显示结果。代码应当处理引发的异常,即在输入的参数数量不足两个或用户输入0作为参数时引发异常。

  3、编写一个程序,说明在一个catch处理程序中引发一个异常时会发生什么情况。

  4、编写一个可演示用户自定义异常用法的程序,该程序接受用户输入的学生人数,当输入一个负数时,认为是非法的,用户自定义异常捕获此错误。

  4、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/773144.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win10资源管理器文件夹错乱

昨天晚上我不知道怎么搞得,鼠标在资源管理器界面,我手放在触控板上,不知道拖拽了啥,把所有文件搞到桌面文件夹下了。然后焦虑了一天,都打算从还原点还原了,然后今天早上更新了Windows,发现最新的还原点就在今早。。。无奈之下想到了去问问ChatGPT,然后居然它真的给了我…

[Redis]原子性

事务 为了确保连续多个操作的原子性,一个成熟的数据库通常都会有事务支持,Redis也不例外。 Redis的事务使用方法非常简单 不同于关系数据库我们无须理解那么多复杂的事务模型就可以直接使用。不过也正是因为这种简单性它的事务模型很不严格这要求我们不能像使用关系数据库的事…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-01 软件工具环境搭建

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1代码编…

【Python】Django学习1

按黑马程序员的美多商场作方向:https://www.bilibili.com/video/BV1nf4y1k7G3一、应用创建、注册处理、配置 Pycharm 创建Django项目: 自应用注册处理: 二、应用数据初始化 第一步:创建元数据初始化py脚本python manage.py makemigrations初始化的脚本会放在各个自应用的…

catboost库作用与安装

CatBoost是一种机器学习库,‌由俄罗斯的搜索巨头Yandex在2017年开源。‌它属于Boosting族算法的一种,‌与XGBoost、‌LightGBM并称为GBDT的三大主流神器。‌CatBoost的主要作用和创新点在于高效合理地处理类别型特征,‌这是从其名称中的"Cat"(‌分类)‌和"…

xgboost的作用与库的安装

XGBoost是一个非常强大的Boosting算法工具包,‌以其优秀的性能(‌效果与速度)‌在数据科学比赛中长期占据领先地位,‌并且在许多大厂的机器学习方案中也是首选模型。‌ XGBoost在并行计算效率、‌缺失值处理、‌控制过拟合、‌预测泛化能力等方面表现出色。‌它的主要特点和…

设计模式:代理、装饰和适配器模式的区别

适配器模式、代理模式、装饰模式结构对比 讲实话,博主当初学习完整设计模式时,这三种设计模式单独摘哪一种都是十分清晰和明确的,但是随着模式种类的增加,在实际使用的时候竟然会出现恍惚,例如读开源代码时,遇到不以模式命名规范的代码时,一时难以说清具体是使用的这三种…

nand2tetris_hack计算机

构建Hack CPU,然后将CPU与RAM集成在一起,创建一个能够执行Hack机器语言的通用16位计算机终于来到了这一步!! 前文里,我们学习了hack编程语言,大概知道需要实现的hack计算机是什么样子,需要实现哪些功能。同时在更早的时候,我们建造了ALU和RAM组件,加上老师内置的ROM和…

暑假集训csp提高模拟10

赛时 rank 19,T1 0,T2 25 T3 10 T4 100 T3 挂了10pts? 数学专场,套路专场,烧脑专场。 幸亏我还有缓存的李超树博客,最后一个小时就溜了去打数据结构。 数学好难,拜谢数学。 T1 黑暗型高松灯 Company Acquisitions 要用势能分析,鞅的停时定理。由于赛时这个放T1非常逆天,…

Java-002

final关键字 final 关键字是最终的意思,可以修饰(类、方法、变量) 修饰类:该类被称为最终类,特点是不能被继承了。 修饰方法:该方法被称为最终方法,特点是不能被重写了。 修饰变量:该变量只能被赋值一次。 final修饰的变量必须赋值,要么在定义时赋值,要么在构造器中赋…

Java-001

Java入门 IDEA优化idea插件 翻译、阿里巴巴代码规范指导IDEA debug使用 Step into:单步执行(一行一行代码执行),如果遇到子函数,就会进入子函数,并且继续单步执行。就是每一行需要执行的代码都不跳过,一行一行进行。 Step over:在单步执行的时候,如果遇到子函数,并不…

ComfyUI插件:ComfyUI Impact 节点(二)

前言: 学习ComfyUI是一场持久战,而 ComfyUI Impact 是一个庞大的模块节点库,内置许多非常实用且强大的功能节点 ,例如检测器、细节强化器、预览桥、通配符、Hook、图片发送器、图片接收器等等。通过这些节点的组合运用,我们可以实现的工作有很多,例如自动人脸检测和优化修…