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了
    • 记住清理资源
  • 相关阅读:
    HDU 2433 Travel (最短路,BFS,变形)
    HDU 2544 最短路 (最短路,spfa)
    HDU 2063 过山车 (最大匹配,匈牙利算法)
    HDU 1150 Machine Schedule (最小覆盖,匈牙利算法)
    290 Word Pattern 单词模式
    289 Game of Life 生命的游戏
    287 Find the Duplicate Number 寻找重复数
    283 Move Zeroes 移动零
    282 Expression Add Operators 给表达式添加运算符
    279 Perfect Squares 完美平方数
  • 原文地址:https://www.cnblogs.com/agts/p/6747601.html
Copyright © 2011-2022 走看看