20155216 2016-2017-2 《Java程序设计》第五周学习总结
教材学习内容总结
使用try,catch,finally处理异常
JVM会尝试执行try区块中的程序代码,如果发生错误,执行流程会跳离错误发生点,然后比较catch区块中声明的类型,是否符合被抛出的错误对象类型,如果是的话,就执行catch区块中的程序代码。
无论try区块中有无发生异常,若撰写有finally区块,则finally区块一定会被执行。finally区块会先执行完后,在将值返回。
一个try所包括的区块,必须有对应的catch区块,可以有多个catch,finally可有可无,如果没有定义catch,则一定要有finally区块。
异常继承架构
设计错误对象都继承自java.lang.Throwable
类,Throwable定义取得错误信息、堆栈追踪等方法,它有两个子类:java.lang.Error
与java.lang.Exception
。
Error对象抛出时,基本上不用处理,任其传播至JVM为止。
如果为程序本身设计错误,使用Exception或其子类实例来表现,必须使用try、catch语句加以处理,或使用throws抛出异常。
throw、throws的使用时机
throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。
throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。
throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。
throw是具体向外抛异常的动作,所以它是抛出一个异常实例。
throws说明你有那个可能,倾向。
throw的话,那就是你把那个倾向变成真实的了。
throws出现在方法函数头;而throw出现在函数体。
throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。
尝试关闭资源
尝试关闭资源语句可套用的对象,必须操作java.lang.AutoCloseable
接口,可同时关闭两个以上的对象资源,中间以逗号分隔。在try中,越后面的对象资源会越早被关闭。
Collection与Map
Collection架构
直接继承Collection接口的有List
List 以特定次序来持有元素。
用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,允许直接按序号索引元素。
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。LinkedList可以被当作堆栈和队列来使用。
Set里的元素是不能重复的,元素重复与否使用equals()
和hashCode
方法进行判断的。
HashSet
类的集合不可以按索引号去检索其中的元素。
TreeSet
是一个有序集合,TreeSet中的元素将按照升序排列,缺省是按照自然排序进行排列,在构造TreeSet对象时,使用Comparator接口作为比较器对象。
Queue
架构。
Map架构
Map 是映射接口,Map中存储的内容是键值对。
AbseractMap
TreeMap 继承于AbstractMap,且实现了NavigableMap接口;因此,TreeMap中的内容是有序的键值对。
HashMap 继承于AbstractMap,但没实现NavigableMap接口;因此,HashMap的内容是键值对,但不保证次序。
Hashtable的内容也是“键值对,也不保证次序”。但和HashMap相比,它支持通过Enumeration去遍历。
Lambda表达式
Lambda表达式的语法省略了接口类型与方法名称,->左边是参数列,右边是方法本体。
Request
编译程序可以由Request request
的声明中得知语法上被省略的信息。
Interable和Iterator
List,Set,Queue都有iterator()
方法和行为,可以使用Iterator的hasNext()
查看有无下一个对象,若有,则用next
取得下一个对象。
Iterable可使循环更加简化。
static void XXX(Iterable iterable) {
for(Object o:iterable) {
System.out.println(o);
}
}
Comparable与Comparator
Collect的sort
方法在取得a对象与b对象进行比较时,调用a.compare(b)
,如果a对象顺序上小于b对象则返回小于0的值,若顺序上相等则返回0,若顺序上a大于b则返回大于0的值。
Comparator的compare()
会传入两个对象,并且在List上增加了Sort()
方法,可接受Comparator实例来指定排序方式。
使用泛型
使用泛型语法,可在设计API时可以指定类或方法支持泛型,适当地使用泛型语句,语法上可以更加简洁,编译程序时也可以事先做类型检查。
教材学习中的问题和解决过程
-
xx1问题
TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常。 -
xx1解决方案
查询资料得:
如果子类和父类都复写了compareTo方法那么各自调用自己的compareTo方法。
如果子类没有复写compareTo方法,那么调用的都是父类的compareTo方法。 -
xx2问题
对于Queue缺乏了解。 -
xx2解决方案
Queue方法 作用 异常形式
add 增加一个元索 , 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 , 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素, 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 , 如果队列已满,则返回false
offer 添加一个元素并返回true, 如果队列为空,则返回null
poll 移除并返问队列头部的元素 , 如果队列为空,则返回null
peek 返回队列头部的元素, 如果队列满,则阻塞
put 添加一个元素, 如果队列满,则阻塞
take 移除并返回队列头部的元素, 如果队列为空,则阻塞
代码调试中的问题和解决过程
-
xx1问题
-
xx1解决方案
在class定义前加上一行:
@SuppressWarnings("unchecked")
来避免终端的警告。 -
xx2问题
-
xx2解决方案
尚未解决。
代码托管
-
代码提交过程截图:
-
代码量截图:
上周考试错题总结
- 1、使用JDB进行调试时单步执行命令有step和next,优先使用next。
- 2、"Hello".charAt(1)的值是‘e’。
- 3、"hello".substring(0,2)的值是"He"。
- 4、不能用父类声明对象引用,用子类生成对象。
- 5、编译RPG.java的命令是
javac -d . *.java
。 - 6、实现一个类中的
equals()
方法时,一定同时实现hashCode()
方法。
结对及互评
结对对象:20155238 张景禹
张景禹同学本周对于java的学习较为认真,每天有翻阅教材并阅读学习指导。
两人在学习过程中一直不断相互解决代码运行中出现的问题以及课本的难点内容的讨论。
唯一不足的是张同学代码提交较少,没有每天提交代码的习惯,在今后的学习过程中将加以督促。
评分标准(满分10分)
-
从0分加到10分为止
-
正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
-
模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
-
教材学习中的问题和解决过程, 一个问题加1分
-
代码调试中的问题和解决过程, 一个问题加1分
-
本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
6 其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
7 扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
点评模板:
-
基于评分标准,我给本博客打分:(0-10)。得分情况如下:xxx
点评过的同学博客和代码
其他(感悟、思考等,可选)
- 1、对于第8、9章的学习最大的感受就是了解了异常继承架构、Map架构和Collection架构,认识到了java的架构形式。
- 2、使用try、catch、finally处理异常是java的一大特点。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 6/6 | 1/4 | 20/20 | |
第二周 | 334/340 | 1/5 | 18/38 | |
第三周 | 570/900 | 1/6 | 22/60 | |
第四周 | 544/1358 | 1/7 | 30/90 | |
第五周 | 731/2089 | 1/8 | 30/90 | 了解了java中的架构,排序,以及异常处理 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:20小时
-
实际学习时间:23小时
-
改进情况: