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

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

时间:2024-07-28 19:08:00浏览次数:9  
标签:语句 Exception Java 处理 第十一章 程序 --- 面向对象编程 异常

第十一章 异常处理

主要知识点

  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、

标签:语句,Exception,Java,处理,第十一章,程序,---,面向对象编程,异常
From: https://www.cnblogs.com/kuangmeng/p/18328320

相关文章

  • BUUCTF-Exec(Web)
    1.相关知识Ping命令ping命令通常用来作为网络可用性的检查。ping命令可以对一个网络地址发送测试数据包,看该网络地址是否有响应并统计响应时间,以此来测试网络的连通情况和测试网络速度。ping命令执行后会显示一系列Replyfrom或者Requesttimeout这样的结果。前者表示与对方......
  • lapce源码学习-启动过程
    一、记录日志1.1、panic恐慌(异常)记录跟踪调用堆栈,如果有源代码信息时,则记录文件路径、行、列、堆栈;否则仅记录堆栈。window系统,调用win32接口弹出模态框窗口提醒。1.2、链路追踪日志,输出到文件和控制台配置文件:文件数目、文件前缀/后缀名、文件收集各目标日志最小级别(红色标......
  • PTA - 字符替换
    本题要求编写程序,将输入字符串中的大写英文字母按以下对应规则替换,其他字符不变。(提示:转换表用元组实现)原字母对应字母AZBYCXDW......XCYBZA输入格式:在一行中输入字符串输出格式:在一行中给出替换完成后的字符串。输入样例:在这里给出一组输入。例如:Thisisapen.......
  • Are Mobile DNN Accelerators Accelerating DNNs? - PPT
    AreMobileDNNAcceleratorsAcceleratingDNNs?-PPT1.pdf1.1.AssociationforComputingMachinery1.2.ResearchGate2.ACMMobiSys20212.1.TechnicalProgram-25June20212.2.FullpresentationReferences1.pdfAreMobileDNNAccelerato......
  • 【Golang 面试 - 进阶题】每日 3 题(三)
    ✍个人博客:Pandaconda-CSDN博客......
  • 洛谷Day1--P1102 A-B数对 P1163 银行贷款
    目录一、引言二、题目及题解题目一:P1102A-B数对题目链接题解:哈希 题目二:P1163银行贷款题目链接题解:二分 三、小结一、引言今天是周日,代码随想录训练营的打卡休息一天。想着刷一点题巩固一下之前的所学,就做了两道洛谷的题,一道用的哈希(也可以二分,个人感觉麻烦......
  • 最高法-发包人承包人对未竣工验收合格工程均同意先实际使用的,不属于司法解释规定的发
    (2023)最高法民申1043号  某甲有限公司、某乙有限公司建设工程施工合同纠纷民事申请再审审查民事裁定书申请人主张:某甲公司申请再审称,根据《最高人民法院关于审理建设工程施工合同纠纷案件适用法律问题的解释》(法释[2004]14号)第十三条的规定:“建设工程未经竣工验收,发包人擅......
  • 决策树分类算法(if-else原理)
    决策树算法在“决策”领域有着广泛的应用,比如个人决策、公司管理决策等。其实更准确的来讲,决策树算法算是一类算法,这类算法逻辑模型以“树形结构”呈现,因此它比较容易理解,并不是很复杂,我们可以清楚的掌握分类过程中的每一个细节。if-else原理想要认识“决策树算法”我们不妨......
  • 数学建模--最小费用最大流问题
    目录数学模型算法步骤实现方法应用实例总结最小费用最大流问题的最新求解算法有哪些?在实际应用中,最小费用最大流问题在哪些领域表现最为突出?如何结合最小费用最大流问题和其他运筹学模型以解决更复杂的问题?最小费用最大流问题的求解过程中存在哪些常见问题及其解决方......
  • BUUCTF-Include(Web)
    一、Include11.相关知识PHP://filterphp://filter是php中独有的一种协议,它是一种过滤器,可以作为一个中间流来过滤其他的数据流。通常使用该协议来读取或者写入部分数据,且在读取和写入之前对数据进行一些过滤,例如base64编码处理,rot13处理等。具体详见:https://blog.csdn.net......