20155303 2016-2017-2 《Java程序设计》第五周学习总结

教材学习中的问题和解决过程

  • 『问题一』:受检异常与非受检异常

『问题一解决』

受检异常:这种在编译时被强制检查的异常称为"受检异常"。即在方法的声明中声明的异常。

非受检异常(运行时异常)在方法的声明中没有声明,但在方法的运行过程中发生的各种异常被称为"不被检查的异常"。这种异常是错误,会被自动捕获。

RuntimeException和它的子类以及Error和它的子类都是非受检异常。因此,对于一个方法抛出RuntimeException和它的子类或者Error和它的子类。调用它无需进行异常处理,编译器能通过。除此之外的其它异常类都需要进行异常处理,即添加try-catch(-finally)语句块进行捕捉和处理。

  • 『问题二』throwthrows

『问题二解决』throw出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。而throws出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。具体用法如下:

throw语法:throw <异常对象>

throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]

注意:throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。

  • 『问题三』ErrorException

『问题三解决』:查询API文档可以得知ErrorException之间的关系:

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 填空:面向对象中,设计经验可以用(设计模式)表达。

结对及互评

20145202马超的博客

基于评分标准,我给本博客打分: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程序设计》第五周学习总结的更多相关文章

  1. 201521123025<java程序设计>第五周学习总结

    1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1.2 ...

  2. Java程序设计第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...

  3. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  4. 20155303 2016-2017-2 《Java程序设计》第九周学习总结

    20155303 2016-2017-2 <Java程序设计>第九周学习总结 目录 学习内容总结(Linux命令) 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考 ...

  5. 20155303 2016-2017-2 《Java程序设计》第一周学习总结

    20155303 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 Chapter1 Java平台概论:MyProgr ...

  6. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  7. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  8. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  9. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  10. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

随机推荐

  1. Unity游戏AI记录(2d横板为例)

    using System.Collections;using System.Collections.Generic;using UnityEngine; public class GeneralPeo ...

  2. 我用Python爬虫挣钱的那些事

    在下写了10年Python,期间写了各种奇葩爬虫,挣各种奇葩的钱,写这篇文章总结下几种爬虫挣钱的方式. 1.最典型的就是找爬虫外包活儿. 这个真是体力活,最早是在国外各个freelancer网站上找适 ...

  3. 机器学习之线性回归使用Python和tensorflow实现

    导入依赖包 import tensorflow as tf import numpy as np import matplotlib.pylab as plt from pylab import mp ...

  4. 机器学习初入门02 - Pandas的基本操作

    之前的numpy可以说是一个针对矩阵运算的库,这个Pandas可以说是一个实现数据处理的库,Pandas底层的许多函数正是基于numpy实现的 一.Pandas数据读取 1.pandas.read_c ...

  5. ping命令使用及其常用参数

    PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量检查网络是否连通,可以很好地帮助我们分析和判定网络故障.Ping发送一个ICMP(Internet Con ...

  6. linux 常用命令-用户、用户组管理

    注:本篇只涉及常用命令,全部命令可以通过help帮助查看. (1)type useradd   #查看命令属于内部命令还是外部命令,内部命令是嵌在linux的shell中,外部命令存储在路径中 (2) ...

  7. Daily Scrum 10.22

    (写于10.22周四0晨) 昨天任务还未完成的继续完成任务. 每个人都查看自己的TFS,修改已经完成的任务状态,改为已关闭-已完成. 由于android studio运行过于慢,我们统一采取eclip ...

  8. MySQL:日期类型

    1. datetime(年月日时分秒) 格式:‘YYY-MM-DD HH:MM:SS’. 占用:8字节 范围:1000-01-01 00:00:00 到 9999-12-31 23:59:59. ti ...

  9. 一本通1639Biorhythms

    1639:Biorhythms 时间限制: 1000 ms         内存限制: 524288 KB [题目描述] 原题来自:POJ 1006 人生来就有三个生理周期,分别为体力.感情和智力周期 ...

  10. BZOJ2729 HNOI2012排队(组合数学+高精度)

    组合入门题.高精度入门题. #include<iostream> #include<cstdio> #include<cstdlib> #include<cs ...