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. lr关联-保存数组并调用(转)

    LOADRUNNER中的一个关联技巧     众所周知,在LoadRunner中,关联是一个很重要的动作,大多数的脚本在录制完成后并不能直接回放,需要通过一定的关联才能成功回放.关联的技巧有很多,这里 ...

  2. 【高级】PHP-FPM和Nginx的通信机制

    PHP-FPM 介绍 CGI 协议与 FastCGI 协议 每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通 ...

  3. 微信小程序组件 模块化错和叹号

    wxml 页面 <import src="/pages/lianxi/lianxi.wxml" />  //引入文件 <view style='position: ...

  4. Caffe使用step by step:r-cnn目标检测代码

    深度学习算法火起来之后,基于深度学习各种模型都如雨后春笋一般在各个领域广泛应用. 由于想把深度学习算法应用在在视频目标检测方向,得到一个较好的结果.由于视频数据的复杂性,因此使用深度学习算法在视频中的 ...

  5. bing 搜索引擎 无法访问 bug

    bing 搜索引擎 无法访问 bug 自从 Google 不好正常使用以后, 一直在使用 bing, 今天突然就 无法访问了,怎么回事?被黑了? ... loading https://cn.bing ...

  6. Spring Cloud与微服务构建:微服务简介

    Spring Cloud与微服务构建:微服务简介 单体架构及其不足 1.单体架构简介 在软件设计中,经常提及和使用经典的3曾模型,即表示层.业务逻辑层和数据访问层. 表示层:用于直接和用户交互,也成为 ...

  7. VM ware 中win2008 找不到网卡驱动的解决办法之一

    在.vmx文件中用如下语句指定: ethernet0.virtualDev = "e1000" 其值为e1000指定网卡类型为Intel(R) PRO/1000(6.5默认为此项) ...

  8. STL Queue 容器

    STL Queue 容器 Queue简介         queue是队列容器,是一种“先进先出”的容器.         queue是简单地装饰deque容器而成为另外的一种容器.        # ...

  9. [洛谷P3829][SHOI2012]信用卡凸包

    题目大意:有$n$张一模一样的信用卡,每个角进行了圆滑处理,问这些卡组成的“凸包”的周长 题解:发现是圆滑处理的圆心围成的凸包加上一个圆周即可 卡点:输入长宽弄反,然后以为是卡精 C++ Code: ...

  10. loj Snakes 的 Naïve Graph 【数论】

    题目链接 loj 题解 感谢珂神的指导orz 观察式子\(i \times j \equiv 1 \pmod m\),显然\(i,j\)是模\(m\)意义下成对的逆元,只需统计模\(m\)意义下存在逆 ...