《Java程序设计基础》第9章习题

9.1 什么是异常?简述Java语言的异常处理机制。
异常是指程序在运行过程中发生由于算法考虑不周或软件设计错误等导致的程序异常事件。
Java语言提供的异常处理机制是通过面向对象的方法来处理异常的。所以在Java语言中所有异常都是以类的形式存在的,除了内置的异常类外,Java语言也允许用户自行定义异常类。Java语言中定义了很多异常类,每个异常类都代表一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。每当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之对应时,系统都会产生一个相应的该异常类的对象。一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,从而保证整个程序运行的安全性。这就是Java语言的异常处理机制。

9.2 Throwable类的两个直接子类Error和Exception的功能各是什么?用户可以捕获到的异常是哪个类的异常?
Error类定义了那些应用程序通常无法捕捉到的错误,由系统保留。Error类及其子类的对象由Java虚拟机生成并抛出给系统,代表了程序运行时Java系统内部的错误。通常Java程序不对这种错误进行直接处理,必须交由操作系统处理。
Exception类是用户程序能够捕捉到的异常,供应用程序使用。一般情况下,通过产生它的子类来创建自己的异常,即Exception类对象是Java程序抛出和处理的对象,它有各种不同的子类分别对应于各种不同类型的异常。

9.3 Exception类有何作用?Exception类的每个子类对象代表了什么?
Exception类是用户程序能够捕捉到的异常,供应用程序使用,一般情况下通过产生它的子类来创建自己的异常。Exception类的每个子类对象代表了某种类型的异常对象。

9.4 什么是运行时异常?什么是非运行时异常?
运行时异常是程序运行时自动地对某些错误做出反应而产生的,所以这类异常可以不编写异常处理的程序代码,依然可以成功编译。这类异常应通过程序调试尽量避免而不是使用try-catch-finally语句去捕获它。
非运行时异常是在程序运行过程中由环境原因造成的异常。这类异常必须在程序中使用try-catch-finally语句去捕获它并进行相应的处理,否则编译不能通过。

9.5 抛出异常有哪两种方式?
(1)系统自动抛出的异常:所有系统定义的运行时异常都可以由系统自动抛出。
(2)使用throw语句抛出的异常:程序中用户自定义的异常不可能依靠系统自动抛出,而必须借助throw语句来定义何种情况产生了此种异常对应的错误,并应该抛出这个异常。

9.6 在捕获异常时,为什么要在catch()括号内有一个变量e?
e的作用是如果捕获到异常,则Java会利用异常类创建一个相应类类型的变量e,利用此变量便能进一步提取有关异常的信息。事实上,可以将catch括号里的内容想象成是方法的参数,因此变量e就是相应异常类的变量。变量e接收到由异常类所产生的对象之后,进入到相应的catch块进行处理。

9.7 在异常处理机制中,用catch()括号内的变量e接受异常类对象的步骤有哪些?
try块中代码可能会抛出一个或多个异常,若发生异常,则程序的运行便中断,并抛出由异常类所产生的对象e;
catch语句块紧跟在try语句块的后面,用来指定需要捕获的异常类型,若抛出的异常对象属于catch后面括号内欲捕获的异常,则catch会捕获此异常,然后进入到catch块内继续执行。

9.8 在什么情况下,方法的头部必须列出可能抛出的异常?
(1)抛出异常的方法:该方法将不对异常进行处理,而由该方法的调用者负责处理;
(2)由方法抛出异常交系统处理:对于程序无法处理的异常,可以在主方法main()方法中使用throws子句声明抛出异常交由系统处理。

9.9 若try语句结构中有多个catch()子句,这些子句的排列顺序与程序执行效果是否有关?为什么?
有关;由于异常对象与catch块的匹配是按照catch块的先后排列顺序进行的,所以在处理多异常时应注意认真设计各catch块的排列顺序。一般地,将处理较具体、较常见异常的catch块应放在前面,而可以与多种异常类型相匹配的catch块应放在较后的位置。若将子类异常的catch语句块放在父类异常catch语句块的后面,则编译不能通过。

9.10 什么是抛出异常?系统定义的异常如何抛出?用户自定义的异常又如何抛出?
抛出异常:在一个程序运行过程中,如果发生了异常事件,则产生代表该异常的一个“异常对象”,并把它交给运行系统,再由运行系统寻找相应的代码来处理这一异常。生成异常对象并把它提交给运行系统的过程称为抛出异常。
系统定义的异常由系统自动抛出。
用户自定义的异常必须借助于throw或throws语句来定义何种情况算是产生了此种异常对应的错误,并应该抛出这个异常。

9.11 自动关闭资源语句,为什么只能关闭实现java.lang.AutoCloseable接口的资源?
关闭打开的资源需调用close()方法,而java.lang.AutoCloseable接口只有一个抽象方法:
void close() throws Exception

9.12 系统定义的异常与用户自定义的异常有何不同?如何使用这两种异常?
系统定义的异常由系统自动抛出。
用户自定义的异常必须借助于throw或throws语句来定义何种情况算是产生了此种异常对应的错误,并应该抛出这个异常。

系统定义的异常类主要用来处理系统可以预见的较常见的运行错误;用户自定义的异常类主要用来处理用户程序中可能产生的逻辑错误,使得这种错误能够被系统及时识别并处理,而不致扩散产生更大的影响,从而使用户程序有更好的容错性能,并使整个系统更加稳定。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值