zoukankan      html  css  js  c++  java
  • 201521123077 《Java程序设计》第9周学习总结

    1. 本周学习总结

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

    异常分为uncheckedExceptioncheckedException

    • checkedException
      继承自Exception的非RuntimeException
    • uncheckedException
      继承自RuntimeException的异常类,例如ArrayIndexOutOfBoundsException,NullPointerException

    二者的区别是uncheckedException可以不用throws 声明及try-catch块包围,因为此类异常一般都是“错误”的程度,例如ArrayIndexOutOfBoundsException就是代码中错误地访问了数据越界的位置导致的,应该在代码中予以修改

    Exception也是一种类,所以它也有很多方法

    • getMessage
      获取异常的详细信息,一般是异常生生成的时候构造器里的String参数,类似于我们其他类的toString方法

    • getStackTrace
      返回一个数组,数组内的元素反映的是该异常自生成以来所经过的每一步,例如一个异常是从一个叫uncheckedExceptionTest的方法中抛出的,在main中被捕获,调用该方法就可以看到它的轨迹

    • fillInStackTrace
      该方法会建立一个新的轨迹记录数组,如图

    • getCause
      这个方法的由来是,异常的构造器可以接受另一个异常作为参数,表示这是它的cause ,这个方法就可以把一个异常的cause展现出来

      可以看到最终捕获的是一个RuntimeException,cause是checkedException函数中抛出的Exception

    2. 书面作业

    题集jmu-Java-05-集合之4-1

    1.常用异常

    题目5-1

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

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

    ArrayIndexOutOfBoundsException,不需要捕获,因为它是一个uncheckedException,在逻辑上避免该异常

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

    继承自Exception(且并不是RuntimeException的子类)的异常

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

    题目5-2

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

    2.2 实验总结

    catch到像这道题目一样的简单异常情况后,可以采用恢复行为,比如这题index从0自增到数组的length,异常的时候可以让index不增加
    不过在程序比较大的情况下就比较难设计恢复行为

    3. throw与throws

    题目5-3

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

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

    需要传递的信息是:异常的类型名,异常发生的位置,异常所经过的栈轨迹,异常的详细信息说明,异常发生的代码行数

    4. 函数题

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

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

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

    如果有多个catch块,而且其中的两种潜在的异常有继承关系,那么需要将子类的catch块放在前面,因为如果不这样做的话,父类的catch语句会先catch到子类异常,导致在后面的子类catch块永远无法执行,实际上,这都无法通过编译

    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 改正代码,让其可正常运行。注意:里面有多个方法均可能抛出异常

    	try
    	{
    		byte[] content = null;
    		FileInputStream fis = null ;
    		try
    		{
    			fis= new FileInputStream("testfis.txt");
    		}catch(FileNotFoundException e)
    		{
    			System.out.println(e);
    		}
    		int bytesAvailabe = fis.available();//获得该文件可用的字节数
    		if(bytesAvailabe>0){
    		    content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
    		    fis.read(content);//将文件内容读入数组
    		}
    		System.out.println(Arrays.toString(content));//打印数组内容
    		try
    		{
    			if(fis!=null)
    				fis.close();//尝试关闭文件
    		}catch(IOException e)
    		{
    			e.printStackTrace();
    		}
    	}
    	catch(Exception e)
    	{
    		System.out.println(e);
    	}
    

    手动将文件名改成不存在的文件,捕获到两个异常
    java.io.FileNotFoundException: testfis2.txt (系统找不到指定的文件。)
    java.lang.NullPointerException

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

    	try(FileInputStream fis =new FileInputStream("testfis.txt");)
    	{
    		byte[] content = null;		
    		int bytesAvailabe = fis.available();//获得该文件可用的字节数
    		if(bytesAvailabe>0){
    		    content = new byte[bytesAvailabe];//创建可容纳文件大小的数组
    		    fis.read(content);//将文件内容读入数组
    		}
    		System.out.println(Arrays.toString(content));//打印数组内容			
    	}
    	catch(FileNotFoundException e)
    	{
    		e.printStackTrace();
    	}
    	catch (IOException e) {
    		e.printStackTrace();
    	}
    

    离开try块的时候会自动关闭fis资源

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

    举至少两个例子说明你是如何使用异常机制让你的程序变得更健壮。
    说明要包含2个部分:1. 问题说明(哪里会碰到异常)。2.解决方案(关键代码)

    首先是一个 FileNotFoundException,在每一次的文件读取与写入的时候都采用了throws声明向上抛出 如下手动删除用户信息文件的时候捕获到的异常

    接下来是 “用户是在用户数据文件中注册的用户但是用户的用户信息文件丢失”这里我们是手动将agt用户的信息文件改名为agtX

    异常处理如下
    如果catch到该种错误 即setName会出现错误,那么我们手动调用savechange方法生成一个新的agt用户信息文件

    结果如下 :

    捕获异常并生成文件

    按下显示agt的购物车 发现显示成功 一个空的购物车

    8.选做:课外阅读

    JavaTutorial中Questions and Exercises

    • 异常之间若存在继承关系则要将子类catch块放在前面,类似catch(Exception e )这样的代码会捕获任意异常,最好不要这样使用
    • 可以只存在try块与finally块 意为try块中无论什么情况都执行finally内容,例如资源的关闭
    • 还了解了几种不同情况的异常等级

    3. 码云上代码提交记录

    题目集:异常

    4. 课外阅读

    Best Practices for Exception Handling
    Exception-Handling Antipatterns Blog
    The exceptions debate

    任选下面一篇文章阅读,列举出几点自己能理解的异常处理最佳实践

    • 不要在无法handle的时候catch一个异常,忽视异常是有风险的行为
    • 如果一个checkedException出现后无法采用有效的恢复行为,那就可以考虑直接将它变为uncheckedException了
    • 记住清理资源
  • 相关阅读:
    bzoj3514 Codechef MARCH14 GERALD07加强版
    差分数列(学习笔记)
    mysql 数据库 replace、regexp的用法
    30岁前男人需要完成的事
    硬盘故障修复十大攻略
    网络工程师考试必备知识
    系统不能正常关机
    忘记XP登入密码的9种解决办法
    Mysql全文搜索match...against的用法
    双绞线网线的连接方式
  • 原文地址:https://www.cnblogs.com/agts/p/6747601.html
Copyright © 2011-2022 走看看