1. 本周学习总结

1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容。

2. 书面作业

本次PTA作业题集异常

1.常用异常

题目5-1

1.1 截图你的提交结果(出现学号)

1.2 自己以前编写的代码中经常出现什么异常、需要捕获吗(为什么)?应如何避免?

有些异常,像RuntimeException在程序中是完全可以避免的,比如数组的越界,只要在程序做个判断,如果访问的数组元素下标和数组的长度作一下比较就知道会不会越界了。该异常由系统检测,属于Unchecked Exception,故无需使用try catch进行异常捕获。所以我们在写代码时需要用到if语句判断是否为空,来避免出现NullPointerException;

1.3 什么样的异常要求用户一定要使用捕获处理??
之前提到的凡是直接继承自Exception的异常都需要捕获处理。

Q2.处理异常使你的程序更加健壮
题目5-2
2.1 截图你的提交结果(出现学号)

2.2 实验总结

Answer:
题目2要求使用异常机制处理异常输入,其实较题目1来说还是相对比较简单的。首先实例化一个数组,然后循环输入数据,用try-catch来实现当输入的是非整型字符串提示异常。

Q3.throw与throws
题目5-3
3.1 截图你的提交结果(出现学号)

3.2 阅读Integer.parsetInt源代码,结合3.1说说抛出异常时需要传递给调用者一些什么信息?

import java.util.Arrays;
import java.util.Scanner;

class ArrayUtils{
public static double findMax(double[] arr,int begin, int end) throws IllegalArgumentException{
if(begin>=end){
throw new IllegalArgumentException("begin:"+begin+" >= "+"end:"+end);
}
if(begin<0){
throw new IllegalArgumentException("begin:"+begin+" < "+"0");
}
if(end>arr.length){
throw new IllegalArgumentException("end:"+end+" > "+"arr.length");
}
double max= arr[begin+1];
for(int i=begin+1;i<end;i++){

if(arr[begin+1]<arr[i]){
double t=arr[begin+1];
arr[begin+1]=arr[i];
arr[i]=t;
max=arr[begin+1];
}


}
return max;
}


}

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
double[] arr=new double[n];

for(int i=0;i<arr.length;i++){
double s=sc.nextDouble();
arr[i]=s;
}
while(sc.hasNextInt()){
int begin=sc.nextInt();
int end=sc.nextInt();
try{
System.out.println(ArrayUtils.findMax(arr,begin,end));
}catch(Exception e){
System.out.println(e);
}

}
sc.close();
try {
System.out.println(ArrayUtils.class.getDeclaredMethod("findMax", double[].class,int.class,int.class));
} catch (Exception e1) {
}
}

}

从Integer.parseInt()源代码中,可以看出根据不同的情况都会抛出异常,可以根据不同情况抛出具体的异常信息,以便调用者了解异常原因。在pta5-3中,对[begin,end]范围内比大小,就需要对begin,end的取值作处理,以防出现异常,对不同的异常打印出不同的异常信息可以让调用者了解是出现begin>=end,begin<0,还是end>arr.length异常。

4.函数题

题目4-1(多种异常的捕获)

4.1 截图你的提交结果(出现学号)

3.2 一个try块中如果可能抛出多种异常,捕获时需要注意些什么?

答:当抛出多种异常时,在写catch时要注意将子类异常写在父类异常前面。若父类异常在前面。则不执行子类异常的捕获,编译会出现错误。例如:

catch(NumberFormatException e1){

System.out.println(e1);//执行,若捕获到,则输出NumberFormatException;

}

catch(IllegalArgumentException e2){

System.out.println(e2);//执行,若捕获到,则输出IllegalArgumentException;

}

catch(Exception e3){

System.out.println(e3);//执行,若捕获到,则输出Exception;

}

当改变三种异常的顺序时:

catch(Exception e3){

System.out.println(e3);//执行,若捕获到,则输出Exception;

}

catch(NumberFormatException e1){

System.out.println(e1);//不执行;

}

catch(IllegalArgumentException e2){

System.out.println(e2);//不执行;

}

出现编译错误。

5.为如下代码加上异常处理

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关闭资源。

Ans:
题目所给代码无法正常运行,也就是说会报错,那么想要它正常运行,就需要弄清楚错在哪,因此我们直接复制粘贴题目所给代码,得到如下报错:

报错显示异常FileNotFoundException和IOException没有得到处理。
使用JDK文档对FileNotFoundException和IOException类进行了查询,惊奇的发现:

FileNotFoundException类是IOException类的子类,那么就是说在Main函数中throws IOException,即可抛出没有得到处理的所有异常。
因此,对程序做throws处理,得到

将代码放到Eclipse中会提示两种解决方案一种是直接throw一个IOException,另一种是tyr catch可能会出错的代码;这里我只写第一种了,关闭资源我就直接file.close

Q6.重点考核:使用异常改进你的购物车系统
举至少两个例子说明你是如何使用异常处理机制让你的程序变得更健壮。
说明要包含2个部分:1. 问题说明(哪里会碰到异常)。2.解决方案(关键代码)

3. 码云上代码提交记录

题目集:异常

学号:201521123116 《java程序设计》第九周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第九周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什 ...

  2. 20145220java程序设计第九周学习总结

    20145220java程序设计第九周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作,开发人员无须接触底层数据可驱动程序的差异 ...

  3. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

                                                                      第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...

  4. 201521044152<java程序设计>第一周学习总结

    本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...

  5. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  6. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  7. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

  8. 马凯军201771010116《面向对象与程序设计Java》第九周学习总结

    一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...

  9. 201521123063 JAVA程序设计 第二周学习总结

    1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...

  10. 《Java》第九周学习总结

    下载mysql 选择mysql的管理软件 idea可以直接连接 然后用库运行程序,但是没有截图,,因为想在navicat上试试,可惜速度太慢了 打开idea又很慢,所以明天再更新

随机推荐

  1. Linux系统常见调用及其分类

    Linux系统调用主要可以分为以下几类: 进程控制  fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 get ...

  2. GitHub Student Developer Pack创建个人网站

    链接:https://zhuanlan.zhihu.com/p/20531579 这个开发包里有什么?作为学生开发者,如何最大化利用它的价值? Atom编辑器,GitHub推出的编辑器,和Sublim ...

  3. iOS Notification – 远程通知

    本文讲解iOS的远程通知的基本使用,主要包括远程通知的类型,处理远程通知的场景,以及远程通知相关证书的配置等等. 一.APNs简介 APNs是苹果公司提供的远程通知的服务器,当App处于后台或者没有运 ...

  4. vue.js学习之组件(下篇)

    本文的Demo和源代码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星! https://github.com/zwl-jasmine95/Vue_test 以下所有知 ...

  5. C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 本篇..基 ...

  6. LaTeX的图片插入及排版

    LaTeX中一般只直接支持插入eps(Encapsulated PostScript)格式的图形文件, 因此在图片插入latex文档之前应先设法得到图片的eps格式的文件. UNIX下的各种应用软件都 ...

  7. 关于 DropDownList 循环绑定中遇到的问题

    1绑定DataTable 简单直接下部分就ok了 this.DropDownList1.DataSource = DataTable; this.DropDownList1.DataTextField ...

  8. GHO2VMDK转换工具分享含VS2010源码

    平常经常用到虚拟机,每次从gho转换为vmdk时都要输入cmd代码,觉得麻烦,自己动手做了个gho2vmdk转换工具,集成ghost32.exe文件,可以一键转换,省时省事.运行时会将ghost32. ...

  9. Django 创建admin账户

    Django版本 1.11.4 安装参考:http://blog.csdn.net/a_little_snail/article/details/76933868 问题:创建admin账户密码 解决: ...

  10. Maven01——简介、安装配置、入门程序、项目构建和依赖管理

    1 Maven的简介 1.1 什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的 Svn eclipse   maven量级 1.2 Maven好处 同 ...