201521123069 《Java程序设计》 第9周学习总结
1. 本章学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容。
(1)使用try...catch语句捕获异常(try块后可跟一个或多个catch块,注意子类异常要放在父类异常前面,否则子类异常永远不会被执行到,编译器也会报错)
(2)java异常继承结构:Error(严重错误,如JRE内部错误,资源耗尽等,属于Unchecked Exception(无需捕获);Exception: RuntimeException(该类异常由系统检测,用户无需try...catch,属于Unchecked Exception)、其他Exception(该类异常受编译器检查,需要用户使用try...catch对异常进行处理,属于Checked Exception)
(3)常见异常:ArrayIndexOutOfBoundsException(数组下标越界异常)、NullPointerException(空指针异常)、ClassCastException(强制转换异常)、FileNotFoundException (文件不存在异常)、IllegalArgumentException(非法参数异常)
(4)finally语句:无论如何都会被执行到的语句,经常使用finally来释放资源。
(5)throws与throw:使用throws关键字声明方法中可能会出现的异常,而throw语句用来抛出异常
2. 书面作业
本次PTA作业题集异常
Q1. 常用异常
题目5-1
1.1 截图你的提交结果(出现学号)
1.2 自己以前编写的代码中经常出现什么异常、需要捕获吗(为什么)?应如何避免?
1.3 什么样的异常要求用户一定要使用捕获处理?
1.1

1.2
答:以前编写的代码中经常出现ArrayIndexOutOfBoundsException,NullPointerException,ClassCastException,IllegalArgumentException等异常,不需要捕获,因为它们都是运行时异常,运行时异常无需捕获。出现运行时异常一般来说是由于编码失误如误用API,我们应该尽量改进代码避免出现此类错误。
1.3
答:除了RuntimeException及其子类以外,其他的Exception类及其子类异常要求用户一定要使用捕获处理。
Q2.处理异常使你的程序更加健壮
题目5-2
2.1 截图你的提交结果(出现学号)
2.2 实验总结
2.1

2.2
实验总结:将字符串转换成有符号的十进制整数,由于字符串可能为非整型字符串,所以可能出现NumberFormatException ,所以要对该异常进行捕获,捕获的同时要求用户重新输入,我们可以将计数器进行自减操作即可实现。
Q3.throw与throws
题目5-3
3.1 截图你的提交结果(出现学号)
3.2 阅读Integer.parsetInt源代码,结合3.1说说抛出异常时需要传递给调用者一些什么信息?
3.1

3.2



答:将字符串参数作为有符号的十进制整数进行解析,parseInt方法只抛出NumberFormatException这种异常,抛出异常时传递给调用者错误发生的原因。如:(1)字符串参数指向为null(2)进制数小于最小进制数2(3)进制数大于最大进制数36(4)字符串的第一个字符不是数字,也不是正负号(5)字符串为正号或负号(6)字符串为""
**Q4.函数题
题目4-1(多种异常的捕获)
4.1 截图你的提交结果(出现学号)
4.2 一个try块中如果可能抛出多种异常,捕获时需要注意些什么? **
4.1

4.2
答:一个try块中如果可能抛出多种异常,捕获时注意子类异常要放在父类异常前面。
Q5.为如下代码加上异常处理
byte[] content = null;
FileInputStream fis = new FileInputStream("testfis.txt");
int bytesAvailabe = fis.available();//获得该文件可用的字节数
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
fis.read(content);//将文件内容读入数组
}
System.out.println(Arrays.toString(content));//打印数组内容
5.1 改正代码,让其可正常运行。注1:里面有多个方法均可能抛出异常。注2:要使用finally关闭资源。
5.2 使用Java7中的try-with-resources来改写上述代码实现自动关闭资源.
5.1
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
byte[] content = null;
FileInputStream fis=null;
try{
fis = new FileInputStream("testfis.txt");
int bytesAvailabe = fis.available();//获得该文件可用的字节数
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
fis.read(content);//将文件内容读入数组
}
System.out.println(Arrays.toString(content));//打印数组内容
}
catch(IOException e){
System.out.println(e);
}
finally{
if(fis!=null){
fis.close();
}
}
}
5.2
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
byte[] content = null;
try(FileInputStream fis=new FileInputStream("testfis.txt")){
int bytesAvailabe = fis.available();//获得该文件可用的字节数
if(bytesAvailabe>0){
content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
fis.read(content);//将文件内容读入数组
}
System.out.println(Arrays.toString(content));//打印数组内容
}
catch(IOException e){
System.out.println(e);
}
}
**Q6.重点考核:使用异常改进你的购物车系统(未提交,得分不超过6分)
举至少两个例子说明你是如何使用异常处理机制让你的程序变得更健壮。
说明要包含2个部分:1. 问题说明(哪里会碰到异常)。2.解决方案(关键代码)
**
(1)从文件中读取商品信息时可能会碰到文件不存在的情况,此时若不对该异常进行捕获,程序就会崩溃。
public static void main(String[] args)throws FileNotFoundException {
Scanner scanner=null;
ArrayList<Stuff>stuff=new ArrayList<Stuff>();
try{
scanner=new Scanner(new FileInputStream("D:\\list.txt"));
while(scanner.hasNextLine()){
String str=scanner.nextLine();
String []str1=str.split(" ");
stuff.add(new Stuff(str1[0],Integer.parseInt(str1[1]),str1[2],Integer.parseInt(str1[3]),str1[4]));
}
}
catch(FileNotFoundException e){
System.out.println(e);
}
finally{
if(scanner!=null)
scanner.close();
}
}
(2)当商品的数量为0时无法将其添加至购物车,抛出异常(自定义异常)
class CannotbeAddToCartException extends Exception {
public CannotbeAddToCartException(String str){
super(str);
}
}
public void add(Stuff e) throws Exception{
if(e.Num==0){
throw new CannotbeAddToCartException("商品库存不足无法添加至购物车");
}
}
public static void main(String[] args)throws Exception {
System.out.print("请输入商品名:");
String str = s.next();
try{
sh.add(Stuff.search(str, stuff));
}
catch(Exception e){
System.out.println(e);
}
}
3. 码云上代码提交记录
题目集:异常
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

201521123069 《Java程序设计》 第9周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- Linux/Unix监控其他用户和信号
--Linux/Unix监控其他用户和信号 ------------------------------------------------------2013/10/27 查看有哪些用户登录 w ...
- Linux学习总结(七)—— CentOS软件包管理:脚本安装
脚本安装就是软件编写者写好一个shell脚本或者java脚本,你只需要输入一些简单的信息便可直接安装.这种安装方式方便简单,类似于Windows下软件的安装方式. 下面以webmin的安装为例讲解脚本 ...
- Tomcat去除端口号和项目名(转)
方法一: 在一个项目结束的时候,往往根据需要直接映射到一个IP地址上.此时就需要去除端口和项目名了,在访问的时候.下面根据具体的例子提供一种实现方法. 一.去掉项目名称 把<Context do ...
- C语言 进程控制---创建进程fork()函数
#include "sys/types.h" #include "stdio.h" #include "stdlib.h" #include ...
- Win10下C:\Users\John以账户名称命名的系统文件夹用户名的修改
Win10下C:\Users\John以账户名称命名的系统文件夹用户名的修改.. 有时候我们由于各种原因想要更改DOS窗口下的账户名称,更改DOS窗口用户名C:\Users\XXX> 即更改为C ...
- Java6和Java8在Windows上共存
0x00 需求 最近在做一个Android的项目,一开始安装的是Java8用于项目的开发.但是在项目后期需要用到drozer用于检测项目的安全性,要搭建drozer的测试环境必须要使用Java6,否则 ...
- [Caffe]史上最全的caffe安装过程
Linux下的GPU版Caffe安装方法 系统环境:Ubuntu 14.04LTS + NV TitanX 1.1 (可选)显卡驱动的安装(有风险) 如果需要重装,需要先卸载已有版本 sudo apt ...
- 写给后端的前端笔记:定位(position)
写给后端的前端笔记:定位(position) 既然都写了一篇浮动布局,干脆把定位(position)也写了,这样后端基本上能学会css布局了. 类别 我们所说的定位position主要有三类:固定定位 ...
- 6.28 Windows Serviece
描述: A 软件,已经注册了一个windows服务并启用,现在需要在服务自己的一个类B里增加一个字段,服务的作用是返回一个该类型B的实例 做法 增加字段,替换服务文件,重新注册服务并开启,但是在A软件 ...
- [2014-12-29]使用Enum位模式进行多重状态(或权限)管理
前言 对于Enum在AspNet Mvc中的应用,我之前提到一种扩展,如何在 Asp.net Mvc 开发过程中更好的使用Enum.这里将介绍另一种更好的使用Enum的方法. Enum定义 以一个代表 ...