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

教材学习内容总结

Lambda

(1)如果使用JDK8的话,可以使用Lambda特性去除重复的信息。

(2)在只有Lambda表达式的情况下,参数的类型必须写出来,如果有目标类型的话,在编译程序可推断出类型的情况下,就可以不写出Lambda表达式的参数类型。

(3)Lambda表达式中this的参考对象以及toString()的接受者,是来自Lambda的周围环境,也就是看Lambda表达式是在哪个名称范畴,就能参考该范畴内的名称,像是变量或方法。

(4)Lambda表达式只是定义函数接口操作的一种方式,除此之外,只要静态方法的方法签署中,参数与返回值定义相同,也可以使用静态方法来定义函数接口操作。

时间与日期

  • 认识时间与日期

  • 时间的度量

(1)格林威治标准时间(GMT):通过观察太阳而得,然而地球公转轨道为椭圆形且速度不一,本身自转亦缓慢减速中,因而会造成越来越大的时间差,已不作为标准时间使用。

(2)世界时:在1972年引入UTC之前,GMT与UT是相同的

(3)国际原子时(TAI),秒的单位定义是基于TAI,也就是铯原子辐射振动次数。

(4)世界协调时间(UTC),UTC考虑了地球自转越来越慢而有闰秒修正,确保UTC与UT相差不会超过0.9秒。

(5)Unix时间:定义为UTC时间1970年(Unix元年)1月1日00:00:00为起点。

(6)epoch:某个特定时代的开始,时间轴上的一瞬间。

(7)就目前来说,即使标注为GMT(无论是文件说明,或者是API的日期时间字符串描述),实际上谈到时间指的是UTC时间。

  • 年历简介

(1)儒略历:修正了罗马历隔三年设置一闰年的错误,改采四年一闰。

(2)格里高利历:改革了儒略历。

(3)ISO 8601标准:采用统一的数据格式。

  • 认识时区

(1)每个地区的标准时间各不相同,涉及到地理、法律、经济、社会、政治等问题。

(2)为了让人们对时间的认知符合作息,因而设置了UTC偏移。

认识Date与Calendar

(1)如果想要取得系统时间,方法之一是使用System.currentTimeMillis()方法,返回的是long类型整数。

(2)Date有两个构造函数可以使用,一个可使用epoch毫秒数构建,另一个为无自变量构造函数,内部亦是使用System.currentTimeMillis()取得毫秒数,调用getTime()可取得内部保存的epoch毫秒数值。

(3)java.text.DateFormat负责字符串时间格式的处理,其操作类为java.text.SimpleDateFormat。
getDateInstance()、getTimeInstance()、getDateTimeInstance()等静态方法主要是取得不同详细程度的时间日期。

(4)SinpleDateFormat有parse()方法,可以按构建SimpleDateFormat时指定的格式,将指定的字符串剖析为Date实例。

(5)Calender是个抽象类,java.util.GregorianCalendar是其子类,操作了儒略历与格里高利历的混合历,通过Calendar的getInstance()取得的Calendar实例,默认就是取得GregorianCalendar实例。

(6)取得Calender实例后,可以使用getTime()取得Date实例,如果想取得年月日等日期时间字段,可以使用get()方法并指定Calender上的字段枚举常数。

(7)日历时间可以使用GregorianCalendar的setGregorianChange()方法来修改,设为Date(Long.MAX_VALUE)就是纯粹的儒略历,设为Date(Long.MIN_VALUE)就是纯粹的格里高利历。
想要比较两个Calender时间日的先后,可以使用after()或before()方法。

(8)使用java.util.TimeZone的getDefault()来取得默认时区信息。

JDK8新时间日期API

(1)Date指的是机器的时间概念。

(2)新时间日期处理API的主要套件命名为java.time。对于机器相关的时间概念,设计了Instant类,用以代表自定义的Java epoch之后的某个时间点经历的毫秒数,精确度基本上是毫秒,但可添加柰秒精度的修正数值。

(3)人类时间观点API,LocalDateTime(包括日期与时间)、LocalDate(只有日期)、LocalTime(只有时间),如果需要时区,可以基于LocalDateTime、LocalDate、LocalTime等来补充。

(4)只想表示年用Year,想表示年月用YearMonth,只想表示月用Month,想表示月日用MonthDay,从0开始,想要取得代表月份的数要用过getValue()方法。

(5)类Duration可用于计量天、时、分、秒的时间差,精度调整可以达纳秒等级,而秒的最大值可以是long类型可保存值。对于年、月、星期、日的是日期差,则使用Period类定义。

代码托管

(statistics.sh脚本的运行结果截图)

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

问题:Java有哪些处理日期时间常用方法?

问题解决方案:

java.util.Calendar

java.util.Date

java.sql.Date

java.util.GregorianCalendar

java.text.DateFormat

上周考试错题总结

  • 错题1:调用线程的interrupt()方法 ,会抛出()异常对象?
    A .IOException

B .IllegalStateException

C .RuntimeException

D .InterruptedException

E .SecurityException

解析:选D、E。

  • 错题2:Given an instance of a Stream, s, and a Collection, c, which are valid ways of creating a parallel stream? (Choose all that apply.)

给定一个Stream的实例s, 一个Collection的实例c, 下面哪些选项可以创建一个并行流?
A .new ParallelStream(s)

B .c.parallel()

C .s.parallelStream()

D .c.parallelStream()

E .new ParallelStream(c)

F .s.parallel()

解析:选D、F。

  • 错题3:如果有以下代码段:
    Thread thread = new Thread(new ________________() {
    public void run() {...}
    });
    空白部分指定哪些类型可以通过编译?
    A .Runnable
    B .Thread
    原因:查API文档,Thread 也实现了 Runnable 接口

  • 错题4:Which of the following are not java.io classes? (Choose all that apply.)
    A .BufferedReader

B .BufferedWriter

C .FileReader

D .FileWriter

E .PrintReader

F .PrintWriter

解析:选E。

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况

- 结对学习内容
    - 第十二、三章的内容

其他(感悟、思考等,可选)

本周完成了第一个java实验,是关于四则运算的。遇到了很多可以挪用c语言中知识点的地方,但是语法上容易转换不过来,以后还要多加练习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 15篇 400小时
第一周 20/20 1/1 20/20 安装了各种程序
第二周 126/100 1/1 25/25 掌握了托管代码
第三周 197/200 1/1 30/30 大体了解java的对象和对象封装
第四周 533/500 1/1 45/40 知道了继承接口等
第五周 733/700 1/1 50/50 try、catch语法的使用来纠错
第六周 300/700 1/1 40/50 看了学习视频
第七周 300/700 2/2 45/50 知道了时间与日期

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:50小时

  • 实际学习时间:45小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料