20155303 2016-2017-2 《Java程序设计》第五周学习总结
20155303 2016-2017-2 《Java程序设计》第五周学习总结
教材学习中的问题和解决过程
- 『问题一』:受检异常与非受检异常
『问题一解决』:
受检异常:这种在编译时被强制检查的异常称为"受检异常"。即在方法的声明中声明的异常。
非受检异常(运行时异常)在方法的声明中没有声明,但在方法的运行过程中发生的各种异常被称为"不被检查的异常"。这种异常是错误,会被自动捕获。

RuntimeException和它的子类以及Error和它的子类都是非受检异常。因此,对于一个方法抛出RuntimeException和它的子类或者Error和它的子类。调用它无需进行异常处理,编译器能通过。除此之外的其它异常类都需要进行异常处理,即添加try-catch(-finally)语句块进行捕捉和处理。
- 『问题二』:
throw与throws
『问题二解决』:throw出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。而throws出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。具体用法如下:
throw语法:throw <异常对象>
throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]
注意:throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。
- 『问题三』:
Error与Exception
『问题三解决』:查询API文档可以得知Error与Exception之间的关系:

Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

Exception类又分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception ),运行时异常;ArithmaticException,IllegalArgumentException,编译能通过,但是一运行就终止了,程序不会处理运行时异常,出现这类异常,程序会终止。而受检查的异常,要么用try...catch捕获,要么用throws字句声明抛出,交给它的父类处理,否则编译不会通过。
- 『问题四』:
read()方法探究
如果使用read()方法时没有重写,则编译失败:

『问题四解决』:InputStream被定义为一个抽象类,相应的,该类下的read()方法也是一个抽象方法,这也就意味着必须有一个类继承InputStream并且实现这个read方法。查阅Java8 API,我们可以看到,在InputStream中定义了三个重载的read()方法:

但是在这三个方法中,只有参数列表为空的read()方法定义为抽象方法,这也就意味着在直接继承自InputStream的所有子类中,必须重写这个方法。

- 『问题五』:
compare()与compareTo()在使用方法上的不同
『问题五解决』:查询API文档可了解两者的差异:


compareTo(Object o)方法是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comparable接口的,必须重写public int compareTo(T o)方法。
compare(Object o1,Object o2)方法是java.util.Comparator接口的方法,它实际上用的是待比较对象的compareTo(Object o)方法。
代码调试中的问题和解决过程
- 『问题一』:
catch()异常的继承关系
在catch括号中列出的异常不得有继承关系,否则会发生编译错误:

『问题一解决』:多重捕捉时要注意异常继承架构。
- 『问题二』:
try-catch-finally的执行关系
『问题二解决』:以下面的程序为例:
try {
statement;
}
catch(TheException ex) {
handling ex;
}
finally {
finalStatement;
}
在任何情况下,finally块中的代码都会被执行,不管try块中是否出现了异常或是否捕获异常。考虑以下几种情况:
若
try块中没有出现异常,finalStatement被执行,try语句的下一条语句被执行。若
try块中有一个语句引起异常,并被catch捕获,就会跳过try块中的其他语句,执行catch和finally子句。若catch块没有重新抛出异常,就会执行try语句之后的下一个语句。如果重新抛出异常,就将这个异常传递给这个方法的调用者。若
try块中有一个语句引起异常,但没有被任何catch块捕获,就会跳过try块中的其他语句,执行finally块,并将异常传递给这个方法的调用者。注意:即使在到达finally块之前有一个return语句,finally块还是会执行。
『问题三』:如何理解课本P247提到的“assert不应当作程序执行流程的一部分”?
这里有一个错误示例:

这个程序中,对personName的赋值被转移到assert语句中,尽管断言有效时它可以很好地运行(即使用-ea运行
时可以有效地运行)但如果断言失效,则它会运行时报空指针错误。因为断言无效时,
personName=personObj.getName()一句永远不会执行。
『问题三解决』:修改后的正确代码如下:

注意:理解断言最重要的一点是必须不依赖它们完成任何程序实际所需的行为。因为正常发布的代码都是断言无效的,即正常发布的代码中断言语句都不不执行的(或不起作用的)。
- 『问题四』:
hashCode()与equals()的区别(编程验证)
『问题四解决』:(1)覆盖hashcode后的Student类::


结果分析:我们没有覆盖equals方法只覆盖了hashCode方法,两个对象虽然hashCode一样,但在将stu1和stu2放入set集合时由于equals方法比较的两个对象是false,所以就没有在比较两个对象的hashcode值。
(2)覆盖equals方法和hashCode方法:


结果分析:stu1和stu2通过equals方法比较相等,而且返回的hashCode值一样,所以放入set集合中时只放入了一个对象。
- 『问题五』:非运行时异常(受检异常)的注意事项(编程验证)
『问题五解决』:(1)子类覆盖父类方法是,父类方法抛出异常,子类的覆盖方法可以不抛出异常,或者抛出父类方法的异常:

(2)子类覆盖父类方法,不能比父类抛出更大的异常:

总结:1:子类覆盖父类方法是,父类方法抛出异常:子类的覆盖方法可以不抛出异常,或者抛出父类方法的异常。
2:父类方法抛出了多个异常,子类覆盖方法时,只能抛出父类异常的子集。
3:父类没有抛出异常,则子类不可抛出异常。若子类发生非运行时异常,需要进行try-catch处理,不能抛出。
4:子类不能比父类抛出更大的异常。
代码托管
代码提交及代码量截图:


上周考试错题总结
- System.out.println( “HELLO”.( toLowerCase() ) ) 会输出“hello”
『考点』:查询API文档可知toLowerCase()的使用方法:将此字符串中的所有字符转换为小写

- 填空:使用JDB进行调试时单步执行命令有step和next,我们优先使用(next)
『考点』:next:把函数执行完成;step:跳进函数内部。
- CH06填空:写出编译P165 RPG.java的命令(javac –d . *.java)
『考点』:P165 RPG.java是一个测试函数,需要把工作类及测试类的程序全部编译。"."表示在当前文件夹下编译。
- Math中的abs()方法可以Override.
『考点』:abs()方法的返回值是绝对值,不能进行重写。
- CH07 填空:用enum定义一个Season的类型表示四季(public enum Season{SPRING, SUMMER, AUTUMN,WINTER})。
『考点』:enum中列举的常数一般用大写字母表示。
- CH07 填空:面向对象中,设计经验可以用(设计模式)表达。
结对及互评
基于评分标准,我给本博客打分:9分。具体如下:
- 正确使用Markdown语法:+1
- 模板中的要素基本齐全:+1
- 教材学习中的问题和解决过程:+3
- 代码调试中的问题和解决过程:+2
- 进度条中记录学习时间与改进情况:+1
- 感想,体会不假大空:+1
点评:可以看出来,马超同学对课本上的内容进行了思考,提出了不少很有价值的问题,这点要向马超学习。模板使用也比较标准。希望以后遇到问题多动手敲代码~继续努力!!!
点评过的同学博客
学习感悟及思考
这一周学习状态不佳,由于周六要参加计算机等级考试,所以前几天将大部分的时间用在刷题上,稍微放松了学校课程的学习。但这周的学习任务并不轻松,所以在接下来的这一周,我需要弥补这周缺失的学习时间,夯实基础,不然很可能阻碍之后的学习。
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 16/16 | 1/1 | 18/18 | 初步认识了Java |
| 第二周 | 219/235 | 1/2 | 28/46 | 学习了Java的基本语法知识 |
| 第三周 | 766/1001 | 1/3 | 23/69 | 了解对象与参考的关系,以及封装的概念与实现 |
| 第四周 | 984/1985 | 1/4 | 18/87 | 学习了继承与多态的关系,以及接口的多态操作 |
| 第五周 | 866/2851 | 1/5 | 12/99 | 学习了异常处理,学会使用Collection收集对象 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
参考:软件工程软件的估计为什么这么难,
计划学习时间:25小时
实际学习时间:12小时
改进情况:学习时间不足,以后应该多投入一些时间,加强练习。
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
20155303 2016-2017-2 《Java程序设计》第五周学习总结的更多相关文章
- 201521123025<java程序设计>第五周学习总结
1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1.2 ...
- Java程序设计第五周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20155303 2016-2017-2 《Java程序设计》第九周学习总结
20155303 2016-2017-2 <Java程序设计>第九周学习总结 目录 学习内容总结(Linux命令) 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考 ...
- 20155303 2016-2017-2 《Java程序设计》第一周学习总结
20155303 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 Chapter1 Java平台概论:MyProgr ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
随机推荐
- Assetbundle管理与加载
最近在做项目优化的时候发现公司的项目用的还是老式的WWW去加载assetbundle资源的形式,而且是通过在两个Update里面分开加载AB和Asset的,这样虽然避免了协程的的使用,但是把一件事分开 ...
- LeetCode 9. Palindrome Number(回文数)
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same back ...
- 利用十字链表压缩稀疏矩阵(c++)-- 数据结构
题目: 7-1 稀疏矩阵 (30 分) 如果一个矩阵中,0元素占据了矩阵的大部分,那么这个矩阵称为“稀疏矩阵”.对于稀疏矩阵,传统的二维数组存储方式,会使用大量的内存来存储0,从而浪费大量内存.为 ...
- LeetCode-37.解数独
编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 ...
- 12.18daily_scrum
本软件中的最后一个界面——“关于”界面的设计已经开始进行,数据传输的内容也差不多进行过半,最主要的任务依旧在测试过程中,我们组接下来还是要大力加强测试的强度和数量,注意边际数据和错误数据的测试处理: ...
- [2017BUAA软工助教]团队beta得分总表
一.累计得分 项目 α例会 α发布 α测试 α展示 α事后 合计 满分 50 10 10 150 10 230 hotcode5 50 10 9 150 9 228 弗朗明哥舞步 50 10 8 13 ...
- [BUG随想录] 看不见的分隔符: Zero-width space
今天在调试一段代码的时候,有一个输入不能为空的库函数抛出了异常(为空就会抛出异常,就是这么傲娇).自己暗骂了自己一番,怎么这么大意,于是追溯源头,开始寻找输入控制的地方.但是当我找到时我惊呆了,我明明 ...
- Beta版本冲刺(五)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- php 中间件
PHP ::双冒号,意为静态成员的访问形式. 中间件$request 速查表:
- 使用Webdriver刷博客文章评论
package com.zhc.webdriver; import java.util.ArrayList; import java.util.Iterator; import java.util.c ...