20155317 王新玮 2016-2017-2 《Java程序设计》第5周学习总结
20155317 王新玮 2016-2017-2 《Java程序设计》第5周学习总结
教材学习内容总结
异常处理 & Collection与Map 异常继承架构
- 错误的对象继承java.lang.Throwable类,Throwable有两个子类Java.lang.Error与java.lang.Exceptions.
- a.Erroe与其子类实例表示严重系统错误。
- b.Exception与其子类实例是异常处理。
- 必须明确使用try,catch语法加以处理,或者用throw声明这个方法会抛出异常,否则会编译失败。
- 受检异常:一定要处理Exception,但不属于RuntimeException.
- 非受检异常:程序不强迫处理。RuntimeException是客户端引发的,属于客户端有关修改的内容,如果一定要处理,建议是呈现友好信息。
- 注:如果父类异常对象在子类异常对象前被捕捉,则catch子类异常对象区块将永远不会被执行。故先捕捉子类。
try、catch语法
- 在使用相关程序时会有许多错误,例如下列代码 这里尝试使用try、catch语法,发现JVM会尝试执行try区块中的程序代码,如果发生错误,就会跳离错误发生点比较catch括号中声明的类型,若符合被抛出错误对象类型。 try、catch语法可以捕捉try部分的异常:
- 无try、catch语法时,出现异常的时候程序就会报错。
- 使用try、catch语法时,出现异常时,程序可仍以正常运行,只是把错误信息存储到Exception里。
- 即catch功能为提取异常信息。
throw & throws
- 方法设计流程出现异常时,可以用throws FileNotFoundException抛出异常,通过调用方法的客户端来处理。
Collection和Map架构
Collection
- java.util.List接口中,记录每个对象的索引顺序,依照索引取回对象。
- java.util.Set接口中,收集对象不重复,并具有集合的行为。
- java.util.Queue接口中,收集对象时以队列方式,收集的对象加入尾端,取得对象时从前端。
- java.util.Deque接口中,对Queue 的两端进行加入、移除等操作。
Map
- 即是以键值对形式的存放数据的容器,主要以哈希Map作为其常用的实现类。Lambada和泛型
Lambada
- 该表达式主要功能为:简化匿名函数的写法,减轻程序员负担。
泛型
- 使用Collection收集对象时,由于收集对象的形态未知,因此内部操作时,都是使用object来参考被收集的对象,取回对象时也是以object类型返回。
- 故若想针对某类定义的行为操作,必须告诉编译程序,让对象重新扮演该类型。JDK5之后增加了泛型语法。若接口支持泛型,在操作时也会比较方便,只要声明参考时有指定类型,那么创建对象时就不用再写类型了。
- 泛型也可以仅定义在方法上,最常见的是在静态方法上定义泛型。
教材学习中的问题和解决过程
-
学习8.1.1时,看到try、catch捕捉错误的案例,书中只捕捉了一个错误,如果有多个错误该如何捕捉?
- 解决:学习到8.1.2时看到书中片段
try{ 事情... }catch(IOException | InterruptedException | ClassCastException e) { e.printStackTrace(); }
- 本周把第三章的课后操作题给编了一下,而且都能比较顺利地编出来,编写过程中遇到的一些错误也能自己发现并纠正。
-
import java.util.Scanner; public class Fibonacci { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int x = 0; int[] Fi = new int[51]; Fi[0] = 0; Fi[1] = 1; System.out.println("求几个费式数?(50以内)"); int num = scanner.nextInt(); if (num >= 2) { for (int j = 2; j < num; j++){ Fi[j] = Fi[j - 1] + Fi[j - 2]; } } for (int i = 0; i < num; i++){ System.out.printf("%3d;",Fi[i]);x++; if (x == 5){ System.out.println(); x = 0; } } } }
代码调试中的问题和解决过程
-
public Test() throws RepletException { try { System.out.println("Test this Project!") } catch (Exception e) { throw new Exception(e.toString()); } }
- 问题:throw和throws的区别有什么啊?这里改成throw可以吗?
- 经过上网搜查后我发现:
- throws是用来声明一个方法可能抛出的所有异常信息,而throw则是指抛出的一个具体的异常类型。通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法。throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。
- 问题2:第八章的学习是异常处理,就是我们平时编程过程中会出现的小问题都有了详细的解答。通过本章的学习我知道了使用try、catch语法,JVM会尝试tyr中的代码如果错误便能跳过错误点,比对catch中声明的类型。并且还了解了很多模块问题出现问题所提示的结果显示,以后的编程中可能会有各种各样的问题,但通过本章的学习了解到了很多问题出现的原因,下次编程若出现,便可以很快地检查对应区域代码,收获颇多。
代码托管
上周考试错题总结
- 判断:Java中所有的对象都有equals()方法。(OK)
- 实现一个类中的equals()方法时,一定要同时实现(hashCode())方法
- 面向对象中,设计经验可以用(设计模式)表达
- 判断:final可以用在类,方法,变量前。(OK)
- Math中的abs()方法可以Override.(X)
- 判断:接口中 int STOP等价于public static final int STOP. (ok)
- 填空:实现接口表示(拥有行为),但不是ISA关系。
- 判断:Math中的abs()方法可以Override.(X)
点评过的同学博客和代码
其他(感悟、思考等,可选)
这周又接触到了没接触过的新知识、新概念。不过凡事都讲究个基本功,感觉要是前面这些的基础知识学的不透彻不理解,后面就更别说了,肯定越来越难,好好学!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 22/90 | |
第五周 | 486/1300 | 2/9 | 21/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。 耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)