实验四 异常处理和包装类的编程练习
- 格式:doc
- 大小:329.00 KB
- 文档页数:9
一、基础语法1. 变量和数据类型定义变量并赋值数据类型转换列表和元组操作2. 控制流条件语句循环语句break和continue语句3. 函数定义和调用函数递归函数默认参数和可变参数4. 模块和包导入模块模块中的函数和变量创建自定义模块二、面向对象编程1. 类和对象创建类和实例化对象类的继承方法重写和多态2. 属性和装饰器属性的getter和setter类装饰器方法装饰器3. 封装和抽象封装原理抽象类和抽象方法抽象基类4. 异常处理tryexcept语句自定义异常异常传播三、文件操作1. 文件读取打开和关闭文件读取文件内容文件读取示例2. 文件写入写入文件内容文件追加文件写入示例3. 文件路径路径操作文件路径示例四、网络编程1. 基础网络TCP/IP协议套接字编程基础网络示例2. HTTP请求发送HTTP请求获取HTTP响应HTTP请求示例3. 请求使用SSL/TLS加密请求示例五、数据结构和算法1. 列表列表操作列表排序列表示例2. 集合集合操作集合示例3. 字典字典操作字典示例4. 排序算法冒泡排序选择排序快速排序5. 查找算法线性查找二分查找哈希表查找六、数据库操作1. SQLite数据库创建数据库和表插入、更新、删除数据查询数据2. MySQL数据库连接MySQL数据库创建表和索引数据操作3. ORM框架使用Django ORM使用FlaskSQLAlchemy ORM示例七、Web开发1. Flask框架创建Flask应用路由和视图模板渲染2. Django框架创建Django项目模型、视图、模板表单处理3. JavaScript和jQuery基础JavaScript语法 jQuery操作DOMAJAX请求八、自动化测试1. 单元测试使用unittest模块编写测试用例测试覆盖率2. 集成测试使用pytest模块编写集成测试用例测试环境配置3. 自动化测试框架使用Selenium使用Robot Framework自动化测试示例九、并发编程1. 多线程创建线程线程同步线程安全2. 多进程创建进程进程间通信进程池3. 异步编程使用asyncio库协程和事件循环异步IO4. 并发工具使用queue模块使用threading模块使用multiprocessing模块十、网络爬虫1. 爬虫基础爬取网页内容解析HTML内容模拟浏览器行为2. 数据提取提取网页中的数据数据清洗和存储数据爬取示例3. 反爬虫策略处理IP封禁处理验证码使用代理IP4. 分布式爬虫使用Scrapy框架分布式任务调度分布式爬虫示例十一、机器学习1. 数据预处理数据清洗特征提取数据可视化2. 线性回归线性回归模型模型训练和评估线性回归应用3. 决策树决策树模型模型训练和评估决策树应用4. 支持向量机支持向量机模型模型训练和评估支持向量机应用十二、Web框架1. Django创建Django项目使用Django模型Django视图和模板2. Flask创建Flask应用使用Flask蓝图Flask中间件3. FastAPI创建FastAPI应用使用FastAPI路由FastAPI依赖注入4. Tornado创建Tornado应用使用Tornado异步处理 Tornado模板十三、API开发1. RESTful API设计资源和操作HTTP方法路由设计2. JSON和XML数据格式JSON数据解析XML数据解析数据序列化和反序列化3. API安全认证和授权数据加密API安全测试4. API文档使用Swagger使用RedocAPI文档编写十四、软件工程1. 版本控制使用Git分支管理代码合并和冲突解决2. 代码审查审查流程审查工具代码质量提升3. 代码风格和规范PEP 8编码规范使用代码风格检查工具代码重构4. 项目管理使用Trello使用Jira项目进度跟踪十五、操作系统1. 进程管理进程状态转换进程同步与互斥进程调度算法2. 内存管理内存分配与回收分页和分段虚拟内存3. 文件系统文件和目录操作文件存储结构文件系统性能优化4. 网络协议TCP/IP协议栈套接字编程网络安全协议十六、数据库高级1. MySQL高级特性存储引擎索引优化性能调优2. NoSQL数据库MongoDBRedis数据模型和操作3. 数据库连接池连接池原理连接池配置连接池管理4. 数据库备份与恢复备份策略恢复流程备份恢复工具十七、云计算1. 云服务模型IaaS、PaaS、SaaS 云计算平台云服务提供商2. 虚拟化技术虚拟机容器技术虚拟化原理3. 云存储云存储服务数据备份与恢复云存储性能优化4. 云安全云安全架构数据加密云安全最佳实践十八、网络安全1. 网络攻击类型DDoS攻击SQL注入XSS攻击2. 防火墙和入侵检测系统防火墙规则入侵检测系统安全策略3. 加密技术对称加密非对称加密数字签名4. 安全协议SSL/TLSIPsecSSH十九、移动开发1. Android开发Activity生命周期广播接收器SQLite数据库2. iOS开发ObjectiveCSwiftUIKit框架3. 响应式设计响应式布局媒体查询移动端优化4. 移动端安全应用安全数据安全用户隐私保护1. 机器学习算法神经网络决策树支持向量机2. 深度学习卷积神经网络循环神经网络对抗网络3. 自然语言处理文本分类机器翻译语音识别4. 计算机视觉图像识别目标检测3D重建,二十一、软件测试1. 单元测试框架unittestpytestnose2. 集成测试测试驱动开发测试金字塔测试覆盖率分析3. 性能测试压力测试负载测试性能瓶颈分析4. 安全测试漏洞扫描漏洞利用安全测试报告二十二、版本控制1. Git分支管理分支策略分支合并分支冲突解决2. Subversion(SVN)版本库操作提交和更新修订历史查询3. Gitflow工作流程特定场景下的Git工作流程发布流程维护和开发分支4. 分布式版本控制系统GitLabBitbucketGitHub二十三、项目管理1. 项目计划项目目标设定项目范围定义项目时间表2. 项目监控进度跟踪资源管理风险评估3. 项目沟通团队沟通策略会议管理沟通工具使用4. 项目交付版本发布用户培训二十四、软件架构1. 架构风格微服务架构容器化架构微服务与容器化结合2. 分布式系统设计服务发现负载均衡分布式事务3. 高可用架构数据库复制高可用集群故障转移机制4. 云原生架构Kubernetes服务网格容器编排二十五、前端开发1. HTML/CSSHTML5新特性CSS3动画响应式设计2. JavaScript框架ReactAngularVue.js3. 前端工具链WebpackBabelGulp4. 前端性能优化图片优化CSS优化JavaScript性能分析二十六、后端开发1. RESTful API设计RESTful原则API文档编写API测试2. Web框架比较Django vs FlaskSpring Boot vs Express Ru on Rails vs Laravel 3. 数据库设计ER图设计关系型数据库设计非关系型数据库设计4. 安全设计身份验证和授权数据加密安全漏洞防护答案一、基础语法1. 变量和数据类型定义变量并赋值数据类型转换列表和元组操作2. 控制流条件语句循环语句break和continue语句3. 函数定义和调用函数递归函数默认参数和可变参数4. 模块和包导入模块模块中的函数和变量创建自定义模块二、面向对象编程1. 类和对象创建类和实例化对象类的继承方法重写和多态2. 属性和装饰器属性的getter和setter类装饰器方法装饰器3. 封装和抽象封装原理抽象类和抽象方法抽象基类4. 异常处理tryexcept语句自定义异常异常传播三、文件操作1. 文件读取打开和关闭文件读取文件内容文件读取示例2. 文件写入写入文件内容文件追加文件写入示例3. 文件路径路径操作文件路径示例四、网络编程1. 基础网络TCP/IP协议套接字编程基础网络示例2. HTTP请求发送HTTP请求获取HTTP响应HTTP请求示例3. 请求使用SSL/TLS加密请求示例五、数据结构和算法1. 列表列表操作列表排序列表示例2. 集合集合操作集合示例3. 字典字典操作字典示例4. 排序算法冒泡排序选择排序快速排序5. 查找算法线性查找二分查找哈希表查找六、数据库操作1. SQLite数据库创建数据库和表插入、更新、删除数据查询数据2. MySQL数据库连接MySQL数据库创建表和索引数据操作3. ORM框架使用Django ORM使用FlaskSQLAlchemy ORM示例七、Web开发1. Flask框架创建Flask应用路由和视图模板渲染2. Django框架创建Django项目模型、视图、模板表单处理3. JavaScript和jQuery基础JavaScript语法 jQuery操作DOMAJAX请求八、自动化测试1. 单元测试使用unittest模块编写测试用例测试覆盖率2. 集成测试使用pytest模块编写集成测试用例测试环境配置3. 自动化测试框架使用Selenium使用Robot Framework自动化测试示例九、并发编程1. 多线程创建线程线程同步线程安全2. 多进程创建进程进程间通信进程池3. 异步编程使用asyncio库协程和事件循环异步IO4. 并发工具使用queue模块使用threading模块使用multiprocessing模块十、网络爬虫1. 爬虫基础爬取网页内容解析HTML内容模拟浏览器行为2. 数据提取提取网页中的数据数据清洗和存储数据爬取示例3. 反爬虫策略处理IP封禁处理验证码使用代理IP4. 分布式爬虫使用Scrapy框架分布式任务调度。
java异常处理练习题Java异常处理练习题Java是一种面向对象的编程语言,广泛应用于软件开发领域。
在Java编程中,异常处理是一个非常重要的概念。
通过合理处理异常,我们可以提高程序的可靠性和健壮性。
本文将介绍一些Java异常处理的练习题,帮助读者更好地理解和掌握异常处理的知识。
1. 编写一个程序,从命令行获取一个整数,并将其平方输出。
如果输入的不是整数,则抛出一个自定义的异常"InvalidInputException",并提示用户重新输入。
```javaimport java.util.Scanner;class InvalidInputException extends Exception {public InvalidInputException(String message) {super(message);}}public class SquareNumber {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);try {System.out.print("请输入一个整数: ");int num = scanner.nextInt();System.out.println("平方结果: " + num * num);} catch (Exception e) {scanner.nextLine(); // 清除输入缓冲区System.out.println("输入无效,请重新输入。
");main(args); // 递归调用自身,重新执行程序}}}```2. 编写一个方法,接收一个整数数组和一个整数n作为参数,返回数组中第n 个元素的值。
如果n超出数组的索引范围,则抛出一个自定义的异常"ArrayIndexOutOfBoundException",并提示用户重新输入。
python异常处理题库1. 什么是异常处理?异常处理是指在程序执行过程中,当发生错误或异常时,程序能够捕获并进行处理的机制。
在Python中,异常处理可以帮助我们优雅地处理程序运行中可能出现的错误,避免程序崩溃,同时提供友好的错误提示信息。
2. Python中的常见异常类型有哪些?Python中常见的异常类型包括但不限于,SyntaxError(语法错误)、NameError(变量未声明或不存在)、TypeError(类型错误)、ZeroDivisionError(除零错误)、IndexError(索引超出范围)、FileNotFoundError(文件未找到错误)等。
3. 如何使用try-except语句处理异常?在Python中,我们可以使用try-except语句来捕获和处理异常。
try块中放置可能引发异常的代码,如果try块中的代码执行时发生了异常,则会跳转到对应的except块进行处理。
在except块中可以指定要捕获的异常类型,也可以使用通用的Exception来捕获所有类型的异常。
4. 除了try-except语句,还有哪些异常处理相关的关键字?除了try-except语句外,Python还提供了其他异常处理相关的关键字,比如else和finally。
在try-except语句中,else块中的代码在try块中的代码没有引发异常时执行,而finally块中的代码无论是否发生异常都会执行,通常用于释放资源或清理操作。
5. 异常处理的最佳实践是什么?在进行异常处理时,最佳实践包括但不限于,精确捕获异常类型、提供清晰的异常提示信息、避免使用裸露的except语句、合理使用else和finally块、避免过度使用异常处理来掩盖程序本身的问题等。
合理的异常处理可以提高程序的健壮性和可维护性。
总结来说,异常处理在Python中是非常重要的,它可以帮助我们更好地处理程序中可能出现的错误,保证程序的稳定性和可靠性。
异常处理是程序设计中非常重要的一部分,尤其是在Python编程中。
在编写程序时,难免会遇到各种意外情况,例如输入错误、文件不存在、网络连接失败等等。
如果不进行适当的异常处理,这些问题可能导致程序崩溃或者产生不可预测的结果。
合理的异常处理是保证程序稳定性和健壮性的关键。
在本文中,我将通过几个实际的编程案例来展示如何在Python中进行异常处理。
我会逐步介绍每个案例的背景和问题,然后演示如何使用try-except语句来捕获并处理异常,最后总结每个案例的经验教训。
希望通过这些案例能够帮助读者更好地理解异常处理的重要性和实际操作方法。
案例一:除零错误问题描述:在编写一个简单的除法计算器程序时,用户输入了除数为零的情况。
解决方法:使用try-except语句捕获ZeroDivisionError异常,给出友好的提示信息并要求用户重新输入合法的除数。
```pythontry:num1 = int(input("请输入被除数:"))num2 = int(input("请输入除数:"))result = num1 / num2print("结果为:", result)except ZeroDivisionError:print("错误:除数不能为零,请重新输入除数。
")```经验总结:在进行除法运算时,始终要考虑到除数为零的情况,避免程序崩溃或产生无意义的结果。
案例二:文件操作异常问题描述:在打开一个不存在的文件时,程序抛出FileNotFoundError异常。
解决方法:使用try-except语句捕获FileNotFoundError异常,检查文件路径是否正确并给出友好的提示信息。
```pythontry:with open("nofile.txt", "r") as file:content = file.read()print(content)except FileNotFoundError:print("错误:文件不存在,请检查文件路径。
Java异常处理编程题异常处理概述在Java编程中,异常处理是一种机制,用于捕获和处理程序运行过程中可能发生的异常情况。
异常是指在程序执行过程中发生的错误或意外情况,例如除零错误、空指针引用等。
异常处理可以提高程序的健壮性和可靠性,使程序在出现异常时能够进行适当的处理,避免程序崩溃或产生不可预知的结果。
Java中的异常是通过异常类的实例来表示的,异常类是从ng.Exception类派生的。
Java中的异常分为两种类型:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。
受检异常是指在编译时需要处理的异常,必须在代码中显式捕获或声明抛出;非受检异常是指在运行时可能发生的异常,可以选择捕获处理,但不强制要求。
异常处理的语法在Java中,异常处理使用try-catch-finally语句块来实现。
try块用于包含可能抛出异常的代码,catch块用于捕获并处理异常,finally块用于定义无论是否发生异常都必须执行的代码。
try {// 可能抛出异常的代码} catch (ExceptionType1 e1) {// 处理ExceptionType1类型的异常} catch (ExceptionType2 e2) {// 处理ExceptionType2类型的异常} finally {// 无论是否发生异常都会执行的代码}在catch块中,可以根据需要捕获不同类型的异常,并进行相应的处理。
多个catch块按照从上到下的顺序进行匹配,一旦匹配成功就会执行相应的处理代码。
如果没有匹配的catch块,异常将会被传递到上层调用栈中进行处理。
finally块中的代码无论是否发生异常都会执行,通常用于释放资源或进行清理操作。
finally块可以省略,但是在某些情况下,例如需要确保资源被正确关闭时,建议使用finally块。
编程题要求根据题目要求,我们需要编写一个Java程序,实现以下功能:1.读取一个文本文件的路径作为输入;2.读取文件内容,并将文件内容转换为大写形式;3.将转换后的内容写入一个新的文件。
实验四Java输入、输出和异常处理实验四Java输入、输出和异常处理一、实验目的1.了解I/O流的使用;2.掌握常见的输入/输出流类及其主要方法。
3.熟悉S y s t e m类,掌握标准输入/输出。
4.学会利用Try-catch-finally语句来捕获和处理异常;5.掌握自定义异常类的方法。
二、实验要求1.使用标准数据流的应用程序。
2.使用文件输入输出流的应用程序。
3.通过编程理解系统异常处理的机制和创建自定义异常的方法。
三、实验内容(一)使用标准数据流的应用程序标准数据流指在字符方式下(如D O S提示符)程序与系统进行输入输出的方式,键盘和显示器屏幕是标准输入输出设备,数据输入的起点为键盘,数据输出的终点是屏幕,输出的数据可以在屏幕上显示出来。
1.程序功能:将键盘上输入的字符在屏幕上显示出来。
2.编写S Y4_1.j a v a程序文件,源代码如下:c l a s s S Y4_1{p u b l i c s t a t i c v o i d m a i n(S t r i n g[]a rg s)t h r o w s j a v a.i o.I O E x c e p t i o n {b y t e b u ff e r[]=n e w b y t e[10];S y s t e m.o u t.p r i n t l n("从键盘输入不超过10个字符,按回车键结束输入:");i n t c o u n t=S y s t e m.i n.r e a d(b u f f e r);//读取输入的字符并存放在缓冲区b u ff e r中S y s t e m.o u t.p r i n t l n("保存在缓冲区b u ff e r中元素的个数为:"+c o u n t);S y s t e m.o u t.p r i n t l n("b u f f e r中各元素的值为:");f o r(i n t i=0;i<="" u="">S y s t e m.o u t.p r i n t(""+b u ff e r[i]);//在屏幕上显示b u ff e r 元素的值}S y s t e m.o u t.p r i n t l n();S y s t e m.o u t.p r i n t l n("输出b u ff e r字符元素:");S y s t e m.o u t.w r i t e(b u ff e r,0,b u f f e r.l e n g t h);}}3.编译、运行S Y4_1.j a v a文件。
异常练习题1.填空题(1)实际情况中可能出现的程序错误是很多的,但是它们基本上可以分为两种类型:一种是 error ,另一种是 exception 。
(2)Java程序不能正常执行可以分为两种情况:编译期错误和运行期错误。
编译期错误通常是指程序本身存在的非法的情形,这些情形常常是因为代码存在的问题而引起的。
而且,编程人员可以通过对程序进行更仔细的检查,尽可能地减少这些问题。
运行期错误则表示另外一种“非同寻常”的错误,这种错误通常是不可预测的。
(3)常见的异常情况包括下标越界、输入格式不匹配等。
(4)异常的处理主要包括 try/catch(捕获处理异常) 、 throws(声明抛出异常)等。
(5)Java中所有的异常都由类来表示,所有的异常都是从一个名为 Exception 的类派生出来的。
因此,当程序中发生一个异常时,就会生成一个异常类的某种类型的对象。
(6)Java异常处理是通过5个关键字来管理的。
它们是 try 、 catch 、Finally 、 throws 和 throw 。
2.选择题(1)Throwable有两个直接子类,分别是和。
(B)A.Exception和Object B.Exception和ErrorC.Object和Error D.LinkageError和VitualmanchineError(2)用于找不到类或接口所产生的异常。
(A)A.ClassNotFoundException B.CloneNotSupportedExceptionC.IllegaAccessException D.InstantiationException(3)在Java程序里,异常对象是依靠语句来捕获和处理的。
(C)A.try/throw B.throw/final C.try/catch D.catch/final(4)直接抛出异常的格式为。
(C)A.try { B.catch (ExceptionObject e)C.throws newExceptionObject; D.throw newExceptionObject;(5)当Java虚拟机崩溃了或用尽了它继续操作所需的资源时,抛出VitualmachineError,下列错误中哪一个不属于VitualmachineError?(C)A.InternalError B.OutOfMemoryErrorC.LinkageError D.UnknownError3.问答题(1)列出5个常见的异常。
python异常处理试题
Python异常处理试题是用来测试和评估学生对Python异常处理的理解和技能的试题。
这些试题通常包括各种类型的题目,从基础知识题到编程题和案例分析题。
以下是一些Python异常处理试题的示例:
1.基础知识题:
o解释Python异常处理的基本概念和作用。
o写出Python中常见的异常类型,并简要说明它们的含义。
o描述try-except语句的工作原理。
2.编程题:
o编写Python代码来捕获一个特定的异常,并打印出一条自定义错误消息。
o编写一个函数,该函数接受一个列表作为参数,并尝试对列表中的每个元素进行平方操作。
如果元素不是数字,则捕获该异常并返回一个
错误消息。
o编写一个程序,该程序从用户那里获取输入,并尝试将其转换为整数。
如果用户输入的不是有效的整数,程序应捕获异常并要求用户重新输
入。
3.案例分析题:
o假设你正在编写一个用于处理网络请求的Python程序,如何处理可能出现的网络连接异常?
o在一个文件读写操作中,如何处理可能出现的文件打开错误或读写错误?
o你编写的一个Python函数出现了异常,如何定位和解决这个问题?
总结来说,Python异常处理试题是用来测试学生对Python异常处理的理解和技能的试题。
这些试题包括基础知识题、编程题和案例分析题等不同类型的题目,旨在帮助学生更好地理解和应用异常处理机制。
实验四包的设计练习实验四包的设计练习【开发语言及实现平台或实验环境】Windows2000 或XP,JDK1.6与Jcreator4.0【实验目的】1. 了解Java 中包(package)。
2. 掌握包的设计方法。
【实验要求】1. 了解Java 系统包的结构。
2. 掌握创建自定义包的方法。
【实验内容】一.了解并使用Java 的系统包1. API 包、接口、异常处理的作用包是类和接口的集合。
利用包可以把常用的类或功能相似的类放在一个包中。
Java 语言提供系统包,其中包含了大量的类,可以在编写Java 程序时直接引用它们。
为便于管理和使用它们,将这些类分为了不同的包。
包又称类库或API 包,所谓API(Application Program Interface)即应用程序接口。
API 包—方面提供丰富的类与方法供大家使用,如画图形、播放声音等,另一方面又负责和系统软硬件打交道,圆满实现用户程序的功能。
所有Java API 包都以“java.”开头,以区别用户创建的包。
接口解决了Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。
处理程序运行时的错误和设计程序同样重要,只有能够完善处理运行时出错的程序,软件系统才能长期稳定地运行,异常处理就是说明如何处理程序运行时出错的问题。
2.上网浏览Java API 文档在地址/ 上,可以看到Java 系统提供的Java API 文档,类文档的内容主要是:类层次、类及用途描述、成员变量列表、构造方法列表、成员方法列表、从类层次上继承的方法列表、成员变量的详细说明、构造方法详细说明、成员方法详细说明。
在这里可以看到Java 提供的Java API 文档的最新内容二.创建并使用自定义包1.自定义包的声明方式<package> <自定义包名>声明包语句必须添加在源程序的第一行,表示该程序文件声明的全部类都属于这个包。
实验四异常处理和包装类的编程练习实验目的了解异常类的作用,掌握对异常的捕获和处理方式,了解包装类的作用和特点以及基本数据类型与包装类的对应关系,掌握包装类的使用方法。
实验要求1、理解系统异常处理的机制;2、创建自定义的异常类型;3、了解基本数据类型和包装类的对应关系;4、理解基本数据类型与包装类之间的区别和联系;5、掌握基本数据类型与包装类之间相互转换的方法。
实验内容1、使用try…catch语句处理异常1.1、异常类型匹配的处理方式(1)程序功能:在程序中主动产生一个ArithmeticException 类型被0 除的异常,并用catch 语句捕获这个异常。
最后通过ArithmeticException 类的对象e 的方法getMessage 给出异常的具体类型并显示出来。
(2)程序源代码如下。
public class EXP5_1{public static void main(String[] arg3) {System.out.println("这是一个异常处理的例子\n");try {int i=10;i /=0;}catch (ArithmeticException e) {System.out.println("异常是:"+e.getMessage());}finally {System.out.println("finally 语句被执行");}}}(3)编译并运行,结果如图5.1所示。
图 5.11.2、异常类型不匹配的处理方式(1)程序源代码如下。
public class EXP5_2{public static void main(String[] args) {System.out.println(“这是一个异常处理的例子\n”); try {int i=10;i /=0;}catch (IndexOutOfBoundsException e) {System.out.println("异常是:"+e.getMessage()); }finally {System.out.println("finally 语句被执行");}}}(2)编译并运行,结果如图5.2所示。
图 5.2因为EXP5_2 程序试图捕获一个异常类为IndexOutOfBoundsException 的异常,但发生的异常却是ArithmeticException 类,所以,程序可以通过编译但在运行时,系统会给出异常报告:报告所发生的但没有被捕获的异常。
不过在此之前,其它语句和finally 语句将会被执行。
1.3、包含多个catch子句的异常处理方式(1)程序功能::在try 子句中设计两个可能出现的异常,当a 为0 时会发生异常。
另外一个是肯定的异常,因为数组c 的长度为1,定义c[42]是为法的。
通过两个catch 子句分别来捕获异常。
(2)程序源代码如下。
public class EXP5_3{public static void main(String[] args) {try {int a=args.length;System.out.println("\na = "+a);int b=42/a;int c[]={1};c[42]=99;}catch (ArithmeticException e) {System.out.println("发生了被 0 除:"+e);}catch (ArrayIndexOutOfBoundsException e) {System.out.println("数组下标越界:"+e);}}}(3)编译并运行,结果如图5.3所示。
图 5.32、使用throw语句抛出异常在上面的实验中,可以发现,异常对象是Java 运行时由系统抛出的。
抛出异常也可以通过使用throw 语句实现。
throw 是Java 语言的关键字,用来告知编译器此处要发生一个异常。
throw 后面要跟一个新创建的异常类对象,用于指出异常的名称和类型。
(1)程序源代码如下。
public class EXP5_4 {static void throwProcess() {try {throw new NullPointerException("空指针异常");}catch (NullPointerException e) {System.out.println("\n在throwProcess方法中捕获"+e.getMessage());throw e;}}public static void main(String args[]) {try {throwProcess();}catch (NullPointerException e) {System.out.println("再次捕获:"+e);}}}(2)编译并运行,结果如图5.4所示。
图 5.43、使用throws语句throws 子句一般用来表明在使用该方法时可能抛出异常但不捕获的异常。
异常由系统来处理。
throws 子句也可以指出抛出异常是RuntimeException 或自定义异常类,即异常的类型,以便准备调用其它方法捕获它,这种情况一般需要两个方法来分别处理抛出异常和处理异常。
(1)程序功能:在这个程序中的mathod 方法中使用throws 子句抛出异常,在main 方法中捕获处理异常。
(2)程序源代码如下。
import java.io.*;public class EXP5_5{static void mathod() throws IllegalAccessException {System.out.println("\n 在 mathod 中抛出一个异常");throw new IllegalAccessException();}public static void main(String args[]) {try {mathod();}catch (IllegalAccessException e) {System.out.println("在 main 中捕获异常:"+e);}}}(3)编译并运行,结果如图5.5所示。
图 5.54、使用finally子句当一个异常被抛出时,程序的执行流程就不再是连续的了,会跳过某些语句,甚至会由于没有与之匹配的catch 子句而过早地返回,结束程序的运行。
为了确保一段代码不管发生什么异常都能被执行,可以使用finally 子句。
每个try 语句至少都要有一个与之相配的catch 或finally 子句。
从一个方法中返回到调用它的另外一个方法,可以通过return 语句或通过一个没有被捕获的异常,但finally 子句总是在返回前被执行。
(1)程序功能:在类EXP5_6 的mathodA 方法中使用try 子句捕获异常,使用finally子句处理异常。
(2)程序源代码如下。
class EXP5_6{static void mathodA() {try {System.out.println("\nmathodA 抛出一个异常"); throw new RuntimeException();}finally {System.out.println("执行 mathodA 的 finally"); }}static void mathodB() {try{System.out.println("mathodB 正常返回");return;}finally {System.out.println("执行 mathodB 的 finally"); }}public static void main(String args[]) {try {mathodA();} catch (Exception e) {mathodB();}}}(3)编译并运行,结果如图5.6所示。
图5.65、创建自定义的异常类(1)程序功能:通过继承Exception 异常类创建一个自定义异常类MyException,然后再创建一个主类EXP5_7 使用自定义异常类MyException。
(2)程序源代码如下。
class MyException extends Exception {private int x;MyException(int a) {x=a;}public String toString() {return "自定义异常类MyException";}}public class EXP5_7 {static void mathod(int a) throws MyException {System.out.println("\t 此处引用 mathod ("+a+")");if (a>10) throw new MyException(a); // 主动抛出MyExceptionSystem.out.println("正常返回");}public static void main(String args[]) {try {System.out.println("\n 进入监控区,执行可能发生异常的程序段");mathod(8);mathod(20);mathod(6);}catch (MyException e) {System.out.println("\t 程序发生异常并在此处进行处理");System.out.println("\t 发生的异常为:"+e.toString());}System.out.println("这里可执行其它代码");}}(3)编译并运行,结果如图5.7所示。
图 5.76、由基本数据类型的值构建包装类对象7、从包装类对象中得到基本数据类型的值。