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

教材学习内容总结

学习目标

了解Lambda语法
了解方法引用
了解Fucntional与Stream API
掌握Date与Calendar的应用
会使用JDK8新的时间API

第12章:Lambda

  • 如果使用JDK8的话,可以使用Lambda特性去除重复的信息。
  • 在只有Lambda表达式的情况下,参数的类型必须写出来,如果有目标类型的话,在编译程序可推断出类型的情况下,就可以不写出Lambda表达式的参数类型。
  • Lambda表达式中this的参考对象以及toString()的接受者,是来自Lambda的周围环境,也就是看Lambda表达式是在哪个名称范畴,就能参考该范畴内的名称,像是变量或方法。
  • Lambda表达式只是定义函数接口操作的一种方式,除此之外,只要静态方法的方法签署中,参数与返回值定义相同,也可以使用静态方法来定义函数接口操作。
  • 使用Optional取代null:null的最根本问题在于语义含糊不清,调用方法时如果返回类型是Optional,应该立即想到它可能包含也可能不包含值,在Optional没有包含值的情况下,get会抛出NoSuchElementException,Optional的ofNullable()来衔接程式库中会传回null的方法。
  • 标准API的函数接口:基本上可以分为Consumer、Function、Predicate与Supplier四个类型
  • 使用Stream进行管道操作:
  • 绝大多数的Stream并不需要呼叫close()方法,JDK8中要close()的是Files.lines()、Files.list()与Files.walk()方法。
  • JDK8引入了Stream API,也引入了管道操作风格,一个管道基本上包括了几个部分:来源、零或多个中间操作、一个最终操作。

第13章:时间与日期

  • JDK出现之前就已经存在的java.util.Date与java.util.Calendar等API
  • 如果想取得系统时间,方法之一是使用System.currentTimeMillis()方法,返回值是long类型整数
  • 使用Date实例来取得系统时间描述,不过Date也是偏向机器的时间观点
  • DateFormat是个抽象类,其操作类是java.text.SimoleDateFormat,也可以直接构建SimpleDateFormat 实例,或是使用DateFormat的getDateInstance()、getTimeInstance()、getDateTimeInstance()等静态方法,用较简便方式按不同需求取得SimpleDateFoamat实例
  • SimpleDateFoama还有个parse()方法,可以构建SimpleDateFormat时指定的格式,将指定字符串剖析为Date实例
  • Date建议作为时间轴上的瞬时代表,要格式化时间日期则通过DateFormat,如果想要取得某个时间日期信息,或者是对时间日期进行操作,可以使用calendar。
  • 建立Calendar实例,可以使用get()方法并指定Calendar上的字段。 使用add()方法改编时间,使用roll()方法只针对日期中的某个字段加减。
  • 使用Calendar时,并没有使用时区信息,这回使用该默认时区,可以使用java.util.TImeZone的getDefault()来取得默认时区信息
  • 可用的ID可以使用TimeZone.getAvailableIDs()来取得,它会返回String[]
  • TemporalAmount:时间差以Duration定义,日期差以Period定义
  • TemporalUnit:between()方法用于计算时间差
  • TemporalAccessor:定义了只读的时间对象

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

  • 问题1:JDK8新时间日期API
  • 问题1解决方案:可以使用Instance的静态方法now()取得代表Java epoch毫秒数。在取得Instance实例后,可以使用plusSeconds()、plusMills()、plusNanos()、minusSeconds()、minusMills()、minusNanos()来做时间轴上的运算,Instance实例本身不会变动,这些操作都会返回新的Instance实例,代表运算后的瞬时。
  • 如果取得了Date实例,而想要改用Instance,则可以调用Date市里的toInstance()方法来取得,如果有个Instance实例,可以使用Date的静态方法from()转为Date。
  • LocalDateTime、LocalDate、LocalTime等类名称开头为Local,表示它们都只是对时间的描述,并没有时区信息。
  • 对于时间计量,新时间与日期API以类Duration来定义,可用于计量天、时、分、秒的时间差,精度调整可以达纳秒等级,而秒的最大值可以是long类型保存值。对于年、月、星期、日的时间差,则使用Period类定义。如:
    import java.time.*;
    import java.util.Scanner;
    import static java.lang.System.out;
    示例代码如下:

public class HowOld2 {
public static void main(String[] args) {
out.print("输入出生年月日(yyyy-mm-dd):");
LocalDate birth = LocalDate.parse(new Scanner(System.in).nextLine());
LocalDate now = LocalDate.now();
Period period = Period.between(birth, now);
out.printf("你活了 %d 年 %d 月 %d 日%n",
period.getYears(), period.getMonths(), period.getDays());
}
}

  • 问题2:对于Date实例的理解存在疑惑
  • 问题2解决方案:
    通过仔细阅读书上p437~438内容,理解了之所以Date实例让我困惑的原因是我没有理解或注意机器时间观点和人类时间观点的差异,Date实例真正代表的并不是日期,最接近的概念应该是时间轴上特定的一瞬间,时间精度是毫秒,也就是UTC时间1970年1月1日0时0分0毫秒至某个特定瞬时的毫秒差,代表的是机器的时间概念,而混淆机器与人类时间观点会产生的问题如:日光节约问题,Date实例内部真正可靠的信息只有内含的epoch秒数,若我们取得Date实例时,要获取时间信息应该是通过Date的getTime()取得epoch毫秒数,这样就不会混淆。

代码调试中的问题和解决过程

  • 问题1:LocalDate.of()、LocalDateTime.of这几个方法的差别
  • 问题1解决方案:通过运行相关代码有所理解,LocalDate、LocalDateTime、LocalTime这几个类名称开头为Local,表示他们都只是对时间的描述,并没有时区信息。对于LocalDate,设定不存在日期,会抛出DateTimeException,如:LocalDate.of(2014,2,29),因为2014不是闰年,对于LocalDateTime.of(1975,4,1,0,0,0),由于没有时区信息,无法判断该时间是否存在,就不会抛出DateTimeException。
  • 问题2:更改commit message
  • 问题2解决方案:通过git rebase修改commit message

代码托管

本周代码量:

总代码量:

上周考试错题总结

  1. 下面命令可以把 f1.txt 复制为 f2.txt
    :
  • cp f1.txt f2.txt
  • cat f1.txt > f2.tx
  • 解析:copy是Windows下的命令。cat f1.txt > f2.tx 通过输出重定向实现了复制。
  1. 错题2及原因,理解情况调用线程的interrupt()方法 ,会抛出()异常对象
  • InterruptedException
  • SecurityException

结对及互评

评分标准

  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

  • 参考示例

点评过的同学博客和代码

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

上周考试,提交出现错误,没有成绩记录,希望在考一次,毕竟多点分啊。上周还有第一次实验,体会到了自己创作实践代码的重要性。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第7周 862/2258 2/30 16/20

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

  • 计划学习时间:20小时

  • 实际学习时间:16小时

  • 改进情况:多实践

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

参考资料

20155231 2016-2017-2 《Java程序设计》第7周学习总结的更多相关文章

  1. 20155305乔磊2016-2017-2《Java程序设计》第九周学习总结

    20155305 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 JDBC简介 1.JDBC是java联机数据库的标准规范,它定义了一组标准类与 ...

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

    20155331 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC是什么? JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间独立 ...

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

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

  4. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  5. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

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

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

  7. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

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

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  9. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  10. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

随机推荐

  1. 学习mysql触发器遇到的问题

    在 mysql.exe 下面运行的.如果是的话, 可能是需要加一个 定义 DELIMITER // 意思是告诉 mysql , 遇到 // 符号以后, 才认为语句结束了. 否则 mysql 遇到 分号 ...

  2. js对象进行浅复制,深拷贝的方法

    js对象浅拷贝和深拷贝详解   本文为大家分享了JavaScript对象的浅拷贝和深拷贝代码,供大家参考,具体内容如下 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象. 下面这个函数,就是在做拷 ...

  3. vue-Slot分发内容

    ①概述: 简单来说,假如父组件需要在子组件内放一些DOM,那么这些DOM是显示.不显示.在哪个地方显示.如何显示,就是slot分发负责的活. ②默认情况下 父组件在子组件内套的内容,是不显示的. 例如 ...

  4. spring注解方式注入

    1.通过Resource注入 1.在属性上注入 1.默认注入 即不指定spring容器里面的名字 匹配规则:先通过属性的名字查找 再通过属性类型与实现类类型匹配查找 当有两个实现类会报错 2.通过指定 ...

  5. 每日一问(常用的集合接口和类有哪些【二】)—ArrayList类和数组之间的转换

    ArrayList的实质是数组,但是在类的实例中所存储的数组是无法访问的,因此实际上是无法直接作为数组使用,那么如何将这两者进行转化呢? Collection接口定义了toArray的方法,可将实现该 ...

  6. mysql二进制日志的开启和使用

    二进制日志(BINLOG)记录了所有的ddl和dml语句,但不包括数据查询语句.语句以“事件”的形式保存,描述数据更改过程. 环境:win8   mysql5.6.23 1.mysql开启二进制日志 ...

  7. Oracle 修改dmp的表空间

    1.百度下载  UltraEdit 并安装 2.打开程序,文件-->打开-->找到dmp  文件太大会提示,选择第一个默认,确定 3.按CTRL+H 转成十六进制编辑 4.例如:dmp里面 ...

  8. 【刷题】洛谷 P1402 酒店之王

    题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...

  9. [NOI2016]旷野大计算

    Subtask0 造计算机神题.给一个忠告:珍爱生命,远离旷野大计算...... 代码在这里:戳我 Subtask1 给定\(a,b\):求\(-2a-2b\). 熟悉操作环境:\([-(a+b)]& ...

  10. SDOI2017遗忘的集合

    题面链接 咕咕咕 题外话 为了这道题我敲了\(MTT\).多项式求逆.多项式\(ln\)等模板,搞了将近一天. sol 最近懒得写题解啊,随便搞搞吧. 看到这个就是生成函数套上去. \[F(x)=\p ...