1. 本周学习总结

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


2. 书面作业

本次PTA作业题集异常

1.常用异常

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

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

以前最常见的是ArrayIndexOutOfBoundsException,即数组越界,该异常需要捕获,因为除了UncheckExcepton之外都需要被捕获,在上题学习总结中有归纳。

避免的话在定义数组和使用数组的时候注意使用的下标是否越界。

1.3 什么样的异常要求用户一定要使用捕获处理?

除了Error以及RuntimeException及其子类以外的异常都需要进行捕获处理。


2.处理异常使你的程序更加健壮

题目5-2

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

2.2 实验总结

在对数组进行赋值的时候使用到try-catch,用来处理NumberFormatException异常。


3.throw与throws

题目5-3

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

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

下面先贴出Integer.parseInt源代码

    public static int parseInt(String s, int radix)
        throws NumberFormatException
{
/*
 * WARNING: This method may be invoked early during VM initialization
 * before IntegerCache is initialized. Care must be taken to not use
 * the valueOf method.
 */

if (s == null) {
    throw new NumberFormatException("null");
}

if (radix < Character.MIN_RADIX) {
    throw new NumberFormatException("radix " + radix +
                                    " less than Character.MIN_RADIX");
}

if (radix > Character.MAX_RADIX) {
    throw new NumberFormatException("radix " + radix +
                                    " greater than Character.MAX_RADIX");
}

int result = 0;
boolean negative = false;
int i = 0, len = s.length();
int limit = -Integer.MAX_VALUE;
int multmin;
int digit;

if (len > 0) {
    char firstChar = s.charAt(0);
    if (firstChar < '0') { // Possible leading "+" or "-"
        if (firstChar == '-') {
            negative = true;
            limit = Integer.MIN_VALUE;
        } else if (firstChar != '+')
            throw NumberFormatException.forInputString(s);

        if (len == 1) // Cannot have lone "+" or "-"
            throw NumberFormatException.forInputString(s);
        i++;
    }
    multmin = limit / radix;
    while (i < len) {
        // Accumulating negatively avoids surprises near MAX_VALUE
        digit = Character.digit(s.charAt(i++),radix);
        if (digit < 0) {
            throw NumberFormatException.forInputString(s);
        }
        if (result < multmin) {
            throw NumberFormatException.forInputString(s);
        }
        result *= radix;
        if (result < limit + digit) {
            throw NumberFormatException.forInputString(s);
        }
        result -= digit;
    }
} else {
    throw NumberFormatException.forInputString(s);
}
return negative ? result : -result;
}

该源代码指出在输入为null、radix < Character.MIN_RADIX、radix > Character.MAX_RADIX等情况的时候将抛出NumberFormatException异常,抛出异常的时候应该给调用者一些该异常的出错处,出错的具体细节是什么。


4.函数题

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

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

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

  • 应该按照try中异常出现的顺序编写catch
  • 在catch块中,Exception的子类应该放在Exception之前,否则将无法捕获

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

  • 在使用FileInputStream的时候可能存在FileNotFoundException异常,是属于IOException的一种
  • fis.read(content)会出现IOException异常

    public static void main(String[] args) {
    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) {
            e.printStackTrace();
    }finally{
            if(fis != null){
    try{
        fis.close();
    }catch(IOException e){
        e.printStackTrace();
    }
        }
    }
        }
        }

5.2 使用Java7中的try-with-resources来改写上述代码实现自动关闭资源

    public static void main(String[] args) throws IOException {
        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) {
            e.printStackTrace();
    }
    }

6.重点考核:使用异常改进你的购物车系统(未提交,得分不超过6分)

举至少两个例子说明你是如何使用异常处理机制让你的程序变得更健壮。

说明要包含2个部分:1. 问题说明(哪里会碰到异常)。2.解决方案(关键代码)

  • 将商品存入数组之后,在读取的时候容易出现数组越界

    解决方案:使用try-catch 块将读取的那块代码圈进去

        public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    Product[] goods=new Product[4];
    goods[0]=new Product("java学习指南",100.38,0);
    goods[1]=new Product("牙刷",5.2,0);
    goods[2]=new Product("茶杯",13,0);
    goods[3]=new Product("牛奶",50,0);
    int choice = sc.nextInt();
    try{
    System.out.println(goods[choice]);
        }catch(ArrayIndexOutOfBoundsException e){
    System.out.println(e);
                }
            }
  • 在输入choice的时候,如果输入的是字母而不是数字,会出现NumberFormatException

    解决方案:使用try-catch将输入choice代码圈起来

        String input = sc.next();
        try{
    int choice = Integer.parseInt(input);
    }catch(NumberFormatException e){
    System.out.println(e);
    }

7.选做:JavaFX入门

如果未完成作业1、2的先完成1、2。贴图展示。如果已完成作业1、2的请完成作业3。内有代码,可在其上进行适当的改造。建议按照里面的教程,从头到尾自己搭建。


3.码云上代码提交记录及PTA实验总结

201521123112《Java程序设计》第9周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

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

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. 【 js 基础 】【 源码学习 】backbone 源码阅读(三)浅谈 REST 和 CRUD

    最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-stud ...

  2. EXT.NET复杂布局(二)——报表

    前面提到过工作台(<EXT.NET复杂布局(一)--工作台>)了,不知道各位看过之后有什么感想.这次就介绍介绍使用EXT.NET画几个报表. 看图写作从小学就开始了,如图: 图一 图二 图 ...

  3. SpringMVC详解(三)------基于注解的入门实例

    前两篇博客我们讲解了基于XML 的入门实例,以及SpringMVC运行的详细流程.但是我们发现基于 XML 的配置还是比较麻烦的,而且,每个 Handler 类只能有一个方法,在实际开发中肯定是不可能 ...

  4. Java连接数据库的4中方式详解

    Java连接数据库的方式有多种:根据所需要的不同数据库驱动分,分为四种: 1:1类驱动.这就是JDBC-ODBC桥的方式. 但这种方式不适合程序的重用与维护,不推荐使用.需要数据库的ODBC驱动. 2 ...

  5. 自制简易Linux系统

    l 要求: 裁剪一个装载有网卡驱动可以上网并且使用到init的一个小系统 l 准备: 虚拟机,centos6.4 l 步骤: 一.在宿主机上添加一块硬盘,并为其安装grub 1. 在宿主机上添加一块硬 ...

  6. .net Path 类

    检索文件扩展名.   GetExtension 检索文件的完全限定路径. GetFullPath 检索路径中的文件名和扩展名. GetFileName 只检索路径中的文件名. GetFileNameW ...

  7. Servlet3.1上传图片示例

    一.前端JSP页面 <%@page pageEncoding="UTF-8"%><!DOCTYPE html><html><head> ...

  8. 关于如何在highchart上获取后台返回的值一些问题。

    项目开发过程中有用到highchart图表进行项目的开发.一个比较常规的需求就是通过点击图表上的模块进行明细的查看. 1.比如坐标一月.二月.三月.四月.....有对应的值01,02,03,04... ...

  9. static和final修饰方法

    static修饰的方法是静态方法,所有的对象共用一份,也就是共享方法.static方法是可以被继承,然后可以被重写和重载. final修饰的方法是不可变方法,final方法所在类被继承时,被final ...

  10. Rxjava2视频笔记

    观察者模式 观察者模式是一对多的模式,多个观察者同时监听一个主题,当主题更新时,会同时通知所有的观察者 subject –>observer 学习新技术的步骤 1.官方文档的查阅和学习 2.Go ...