20155320 2016-2017-2 《Java程序设计》第五周学习总结
教材学习内容总结
错误处理
-
java中所有错误都会被打包为对象,可以通过try catch 代表错误的对象后做一些处理。
TtryCatchf 处理范例 Average2和Average3
运行结果为:
-
错误会被包装为对象,这些对象都是可抛出的,设计错误的对象都继承自
java.lang.Throwable
类 -
如果某个方法声明抛出Throwable或子类实例,只要不是属于
Error
、java.lang.RuntimeException
或其子类实例,就必须1.明确使用try、catch语法加以处理2、用throws
声明这个方法会抛出异常。否则会编译失败 -
exception
及其子对象称为受检异常,必须做出处理 -
InputMismatchException
为一种RuntimeException
避免出现InputMismatchException的程序Average4运行结果为:
-
String的
match()
方法中设定了"d*"表示检查字符串中的字符是不是数字。 -
如果父类异常对象在子类异常对象前被捕捉,则catch子类异常对象区块将永不执行,则会被编译程序检查出错
-
catch括号中列出的异常不得有继承关系。
-
对于受检异常,如果当前环境不足以处理异常,必须使用throws声明此方法会抛出的异常类型或父类型由调用方法客户端处理,才能通过编译。
-
在catch区块进行完部分错误处理之后,可以使用throw将异常再抛出,在程序中如果抛出的是受检异常,则必须在方法上使用throws声明
代码范例FileUtil2 -
如果使用继承时,父类某个方法声明throws某些异常,子类重新定义该方法时不可以1.throws父类方法中未声明的其他异常2.throws父类方法中声明异常的父类
-
查看堆栈追踪可以直接调用printStackTrace()
程序房里StackTraceDemo运行结果:
结果显示了异常类型,最顶层是异常的根源,以下是调用方法的顺序:
-
想要取得个别的堆栈追踪元素进行处理,则可以使用``getStackTrace()```,这会返回StackTraceElement数组
-
若要用堆栈追踪,程序中不可有私吞异常。
-
用throw重抛异常时,异常的追踪堆栈起点,仍是异常的发生根源,而不是重抛异常的地方。
程序StackTraceDemo2运行结果为:
-
若要堆栈起点为重抛的地方,可以使用fillInStackTrace(),并返回Throwable()对象。
程序fillStrackTrace() -
断言可以使用
assert
关键字,若要执行时启动断言检查,可在执行java指令时,指定-enableassertions或是-ea自变量 -
因错误而抛出异常时,抛出异常处之后的程序代码就不会被执行。但若有finally区块,则finally区块一定会被执行。
程序FinallyDemo运行结果为:
-
若一个异常被catch后的处理过程引发另一个异常,通常会抛出第一个异常作为响应,addSuppressed()方法可将第二个异常记录在第一个异常中,getSuppre()可以返回Throwable[],代表先前被addSuppressed()记录的各个异常对象。
-
AutoCloseable接口仅定义了close()方法,只要操作这个接口,就可以套用至尝试关闭资源语法。
AutoCloseable操作程序运行结果为:
-
关闭资源语法课同时关闭两个以上的对象资源,中间以分号分隔,try的括号中越后面撰写的对象资源会越早被关闭
AutoClosable2运行结果为:
Collection与Map
- List是一种Collection,作用是收集对象,并以索引方式保留收集的对象顺序。
- ArrayList 是使用Object数组来保存收集的对象,根据索引随机存取时速度快但调整索引顺序时不便,且数组长度固定;LinkeList采取了链接结构,查找起来会比较没有效率,排序就比较不适合使用List。
具有索引的List
- 在收集过程中若有相同对象则不重复收集,可以使用Set接口的操作对象。String的
split()
方法可以指定切割字符串的方式,split会返回String[],HashSet可实现收集对象,其toString()
则会包括收集的字符串。
程序WordCount
运行结果为:
-
HashSet 会使用对象的
hashCode()
与equals()
来判断对象是否相同运行结果为:
运行结果为:
-
若对象有操作Queue,并打算以队列方式使用,且队列长度受限,通常建议 使用
offer()
,poll()
与peek()
等方法。
程序RequestQueue -
Queue的子接口Deque就定义了这类行为,
offerLast()
等操作失败时会返回特定值
程序Stack运行结果为:
-
泛型语法可以在设计API时指定类或方法支持泛型,并得到编译时期检查,使用<>表示支持泛型。
程序ArrayList -
使用Lambda可避免信息重复。
教材学习中的问题和解决过程
- 学习第九章时,对HashSet中Arrays.asList()的作用清楚,在后边又出现了
List names=Arrays.asList("Justin","Monica","Irene")
- 通过百度阅读了一些相关博客了解到
Arrays.asList()的作用是将数组转为List(列表)
代码调试中的问题和解决过程
- 在第八章中学习错误抛出时,我在写程序Average3时,由于不注意将trycatch的位置打在了循环的外部,结果出现了如下错误:
- 后通过比照课本代码,正确修改了过来,我同时通过百度发现无论是在c++还是java中,try catch似乎都不能出现在循环外。
代码托管
- 代码量截图:
上周考试错题总结
- 21.判断:XX是一个引用型变量,System.out.println(XX)等价于System.out.println(XX.toString()).(OK),在用println时toString可以不用打出来,是等价的
- CH06填空:实现一个类中的equals()方法时,一定要同时实现(hashCode())方法;java中许多要判断对象是否重复时,都会调用hashCode()与equals()方法,因此规格书中建议两个方法必须同时操作。
- 30.填空:面向对象中,设计经验可以用(设计模式)表达
- 4.判断:抽象类的子类可以是抽象类也可以不是。(OK);在子类中可以重新定义父类中的抽象方法
结对及互评
基于评分标准,我给本博客打分:8分。得分情况如下:
- 正确使用Markdown语法:+1
- 模板中的要素基本齐全:+1
- 教材学习中的问题和解决过程:+3
- 代码调试中的问题和解决过程:+2
- 进度条中记录学习时间与改进情况:+1
点评过的同学博客和代码
学习感悟及思考
本周学习了异常处理以及Collection与Map相关的内容,尤其是抛出异常部分,让我感受到了java语言的特别之处,这在学习c语言时是不曾有过的。而第九章中的不同种操作了List接口的对象优缺点与最近学习的数据结构不同存储结构的优缺点相互联系了起来,虽然这个星期学习任务较重,在一些部分的学习上遇到了困难,但感觉学习的这些专业课程开始相辅相成了起来,也是一大收获。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 15篇 | 400小时 | |
第一周 | 20/20 | 1/4 | 20/20 | 安装了JDK及IDEA |
第二周 | 144/164 | 1/5 | 18/38 | 学习了java语言的基本语法 |
第三周 | 447/567 | 1/6 | 20/ 58 | 掌握了一些有关对象和封装的内容 |
第四周 | 875/ 1442 | 1/7 | 23/81 | 学习了解了继承、接口和多态的相关问题 |
第五周 | 775/2250 | 1/8 | 25/106 | 学习了异常处理以及Collection与Map相关的内容 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:25小时
-
实际学习时间:25小时
-
改进情况:根据本周内容量较大本来定的是23小时,后来学了一些后发现还很难理解,于是增加了两小时的学习量。