学号:201521123116 《java程序设计》第九周学习总结

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. 码云上代码提交记录

题目集:异常

时间: 2025-01-04 22:16:14

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

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

一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3.程序中出现的常见的错误和问题有:用户输入错误.设备错误.物理限制.代码错误. 4.Java把程序运行时可能遇到的错误分为两类: (1)非致命异常:通过某种修正后程序还能继续执行.这类错误叫作异常.如:文件不存在.无效的数组下标.空引用.网络断开.打印机脱机.磁盘满等. Java中提供了一种独特的处

201621123041java程序设计第九周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 1. List中指定元素的删除(题集题目) 1.1 实验总结.并回答:列举至少2种在List中删除元素的方法. 本题实验要注意使用split语句时,如果要求一个或多个空格为分隔符时,要使用line.split(" +"); 可以使用remove函数来删除元素,也可以使用迭代器iterator的方法. 2. 统计文字中的单词数量并按出现次数排序(题集题目) 2.1 伪代码(不得复制代

20155335 俞昆 2016-2017-2 《Java程序设计》第九周学习总结

学号 2016-2017-2 <Java程序设计>第九周学习总结 ##JDBC入门 在正式介绍JDBC前,已知JDBC是用来执行SQL的解决方案,开发人员使用JDBC的标准接口,开发人员不需接触底层数据库驱动程序的差异性. 本章,我们需要了解JDBC与API使用和概念,我们先要认识应用程序如何与数据库进行沟通,数据库本身是一种独立运行的应用程旭,程序员撰写的应用程序是利用通信协议对数据库进行指令交换,以进行数据的增加删除以及查找. 通常应用程序会利用一组专门与数据库进行通信协议的链接库,以简化

20165324 《Java程序设计》第九周学习总结

学号 20165324 <Java程序设计>第九周学习总结 教材学习内容总结 第十三章 Java网络编程 URL类 使用URL创建对象的应用程序称为客户端 一个URL对象封装一个具体资源的引用 一个URL对象包含最基本的三部分信息:协议,地址和资源. URL类的构造方法: 该构造方法使用字符串初始化一个URL对象URL url=new URL("http://www.google.com"); public URL(String protocol,String host,S

学号20172328《程序设计与数据结构》第九周学习总结

学号20172328<程序设计与数据结构>第九周学习总结 教材学习内容总结(异常和递归) 第11章:异常 1.[异常处理]: 一个异常:是一个定义非正式情况或错误的对象,由程序或者运行时环境抛出,可以根据需要捕获和处理. 错误:错误类似于异常,但是错误代表不可恢复的问题并且必须捕获处理. 2.[处理异常的三种方法]:①根本不处理异常②当异常发生时处理异常③在程序的某个位置集中处理异常. 3.[未捕获的异常]:如果程序中不处理异常,则程序将非正常的终止运行,并产生关于描述在何处发生什么异常的信息

20145311 《Java程序设计》第九周学习总结

20145311 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1JDBC 16.1.1JDBC简介 JDBC(Java DataBase Connectivity)是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性. 厂商在操作JDBC驱动程序时,依方式可将驱动程序分为4种类型: ·Type 1:JDBC-ODBC Bridge Driver·Type 2:Native API

20165329 《Java程序设计》第九周学习总结

20165329 <Java程序设计>第九周学习总结 教材学习内容总结 第十二章 URL类 构造方法1 try { URL url = new URL("http://www.google.com"); } catch(MalformedURLException e) { System.out.println("Bad URL:"+url); } 构造方法2:用public URL(String protocol,String host,String f

20165208 2017-2018-2 《Java程序设计》第九周学习总结

20165208 2017-2018-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十三章 URL类 URL对象包含三部分信息:协议.地址和资源 创建URL对象两种方法: public URL (String spec) throws MalformedURLException public URL(String protocol,String host,String file) throws MalformedURLException 使用字符串初始化一个URL对象URL ur

20165235 祁瑛 2018-4 《Java程序设计》第九周学习总结

20165235 祁瑛 2018-4 <Java程序设计>第九周学习总结 教材学习内容总结 URL类 UR类是java.net包中的一个重要类,使用URL创建的对象的应用程序称作称作客户端程序. 一个URL类用如下的构造方法来创建一个类: public URL(String spec) throws MalformedURLException URL创建的对象是http协议,所包含的资源是默认的资源(主页) URL对象可以通过调用InputStream openStream()方法可以返回一个

20165318 2017-2018-2 《Java程序设计》第九周学习总结

20165318 2017-2018-2 <Java程序设计>第九周学习总结 目录 学习过程遇到的问题及总结 教材学习内容总结 第13章 Java网络编程 代码托管 代码统计 学习过程遇到的问题及总结 Q1:运行课本例子4时,代码中为汉字,但同样的输出的字符为乱码. 解决方法:检查后发现,使用的编码方式不一致,其他源文件使用的是GBK,而运行的Client4使用的是UTF-8,将这个源文件也改为GBK编码,就可以正确运行了. Q2:运行课本例子4后又运行例子3时,提示以下问题. 解决方法:我猜