20145240《Java程序设计》第七周学习总结

教材学习内容总结

12.1认识Lambda语法

12.1.1Lambda语法概览

  • java中引入了Lambda的同时,与现有API维持兼容性是主要考虑之一。

  • 方法参考的特性,在重用现有API上扮演了重要角色。

  • 重用现有方法操作,可避免到处写下Lambda表达式。

  • 方法参考不仅避免了重复撰写Lambda表达式,也可以让程序代码更清楚。

12.1.2Lambda表达式与函数接口

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

  • Lambda表达式本身是中性的,不代表任何类型的实例,同样的Lambda表达式,可用来表示不同目标类型的对象操作。

  • JDK8的Lambda并没有导入新类型来作为Lambda表达式的类型,而是就现有的interface语法来定义函数接口,作为Lambda表达式的目标类型。

  • 如果接口使用了@FunctionalInterface来标注,而本身并非函数接口的话,就会引发编译错误。

12.1.3Lambda遇上this与final

  • Lambda表达式并不是匿名类的语法蜜糖。

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

  • 在JDK中,如果变量本身等效于final局部变量,也就是说,如果变量不会再匿名类中有重新指定的动作,就可以不用加上final关键词。

  • 如果Lambda表达式中捕获的局部变量本身等效于final局部变量,可以不用在局部变量上加上final

  • lambda表达式中不可以改变被捕获的局部变量值。

12.1.4方法与构造函数参考

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

12.1.5接口默认方法

  • 除了参考静态方法作为函数接口操作之外,还可以参考特定对象的实例方法。

  • 函数接口操作也可以参考类上定义的非静态方法,函数接口会试图用第一个参数方法接受者,而之后的参数依次作为被参考的非静态方法的参数。

13.1认识时间与日期

13.1.1时间的度量

  • 1.格林威治标准时间(GMT):常被不严谨地当成是UTC时间,现已不作为标准时间使用。

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

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

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

  • 5.Unix时间:不考虑闰秒修正,用以表达时间轴上某一瞬间

  • 6.epoch:某个特定时代的开始,用以表达时间轴上某一瞬间

13.1.2年历简介

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

  • 2.格里高利历:将儒略历1582年10月4号星期四的隔天,订为格里高利历1582年10月15日星期五。

  • 3.ISO 8601标准,采用统一的数据格式例如:yyyy-mm-ddTHHH:MM:SS.SSS

13.1.3认识时区

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

  • 考虑了UTC偏移的时间表示上,通常会标识Z符号。

  • 有些高纬度国家,夏季、冬季日照时间差异很大,实施日光节约时间。

13.2认识Date与Calendar

13.2.1时间轴上瞬间的Date

eg:使用Date实例来取得系统时间描述。

  • 运行结果

13.2.2格式化时间日期的DateFormate

  • DateFormat是个抽象类,其操作类是java.text.SimpleDateFormat,你可以直接构建SimpleDateFormat实例,或是使用DateFormat的getDateInstance()、getTimeInstance()、getDateTimeInstance等静态方法,用较简便方式按不同需求取得SimpleDateFormat实例。

eg:如何通过DateFormat的各种静态方法进行格式化。

  • 运行结果

eg:直接构建SimpleDateFormat的好处是,可使用模式字符串自定义格式。

  • 运行结果

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

  • 运行结果

13.2.3处理时间日期的Calendar

  • Date现在建议作为时间轴上的瞬间代表,要格式化时间日期则通过DateFormat,如果想要取得某个时间日期信息,或者是对时间日期进行操作,可以使用Calendar实例。

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

eg:

Calendar calendar = Calendar.getInstance();
  • 取得Calendar实例后,可以使用getTime()取得Data实例,如果想要取得年月日等日期数字时段,可以使用get()方法并指定Calendar上的数字段枚举常数。

eg:想取得年、月、日字段。

out.println(calendar.get(Calendar.YEAR));
out.println(calendar.get(Calendar.MONTH));
out.println(calendar.get(Calendar.DATE));
  • 如果你要设定时间日期等字段,不要对Date设定,应该使用Calendar,同样地,月份的部分请使用枚举常数设定。

eg:

Calendar calendar = Calendar.getInstace();
calendar.set(2016,Calendar.APRIL,16); // 2016/04/16
out.println(calendar.get(Calendar.YEAR)); // 2016
out.println(calendar.get(Calendar.MOUNTH)); //Calendar.APRIL取值3
out.println(calendar.get(Calendar.DATE)); //16
  • 在取得一个Calendar的实例后,可以使用add()方法,来改变Calendar的时间。

eg:

calendar.add(Calendar.MONTH,1);  //Calendar时间加1个月
calendar.add(Calendar.HOUR,3); //Calendar时间加3小时
calendar.add(Calendar.YEAR,-2); //Calendar时间减2年
calendar.add(Calendar.DATE,3); //Calendar时间加3天
  • 如果打算只针对日期中某个字段加减,则可以使用roll()方法。

eg:

calendar.roll(Calendar.DATE,1);  //只对日字段加1
  • 想比较两个Calendar的时间日期先后,可以使用after()before()方法。

eg:使用Calendar计算用户的岁数。

  • 运行结果

13.2.4设定TimeZone

  • 使用Calendar时若没有使用时区信息,则会使用默认时区。

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

  • 运行结果

  • Calendar在调用getInstance()时,可以指定Timezone,如果已经取得Calendar实例,也可以通过setTimeZone()方法设定TimeZone

eg:想知道现在哥本哈根的时间,并指定TimeZone为北京。

  • 运行结果

13.3JDK8新时间日期API

13.3.1机器时间观点的API

  • 由于台湾时区已经不实施日光节约一段时间了,许多开发者并不知道过去有过日光节约时间,在取得Date实例后,被名称Date误导他们代表日期,所以不应该使用Data实例来得知人类观点的时间信息,Date实例只代表机器观点的时间信息,真正可靠的信息只有内含epoch毫秒数。

  • 同时也可以使用Instant的静态方法now()取得代表Java epoch毫秒数的Instant实例。

  • 在新旧API兼容上,如果取得了Date实例,而想要改用Instant,则可以调用Date实例的toInstant()方法来取得,如果你有个Instant实例,可以使用Instant的静态方法from()转为Date

13.3.2人类时间观点的API

1.LocalDateTime、LocalDate和LocalTime
LocalDateTime:包括日期与时间

LocalDate:只有日期,如果设定不存在的日期,会抛出DateTimeException

LocalTime:只有时间

这些类基于ISO 8601年历系统,是不具时区的时间与日期定义。

对于LocalDateTime.of,由于没有时区信息,程序无从判断这个时间是否不存在,就不会抛出DateTimeException
2.ZonedDateTime、OffsetdateTime

eg:如果你的时间日期需要带有时区,可以基于LocalDateTime、LocalDate、LocalTime等来补充缺少的信息。

  • 运行结果

3.Year、YearMonth、Month、MonthDay

eg:如果想要取得代表月份的数字,不要使用oridinal()方法,因为oridinal()是enum在定义时的顺序,从0开始,想要取得代表月份的数要通过getValue()方法(调整了格式,使其对齐)。

  • 运行结果

13.3.3对时间的运算

1.TemporalAmount
  • ofPattern()java.time.format.DateTimeFormatter的静态方法,可以查看API文件了解格式化的方式。

  • 对于时间计量,新时间与日期API以类Duration来定义,可用于计量天、时、分、秒的时间差,精度调整可以达纳秒等级,而秒的最大值可以是long类型可保存值。

  • 对于年、月、星期、日的日期差,使用Period类定义。

  • plus()方法可以接受Duration实例来计算

eg:使用新时间与日期API改写HowOld范例。

  • 运行结果

2.TemporalUnit
  • plus()方法另一重载版本,接受java.time.temporal.TemporalUnit实例,java.time.temporal.ChronoUnitTemporalUnit实作类,使用enum实作。

  • TemporalUnit定义了between()等方法。

3.Temporal
  • 相对于plus(),也有两个重载两个重载版本的minus()

  • plus(TemporalAmount amount)

  • plus(long amountToAdd,TemporalUnit unit)

  • minus(TemporalAmount amount)

  • minus(long amountToSubtract,TemporalUnit unit)

4.TemporalAccessor
  • TemporalAccessor定义了只读的时间对象读取操作,实际上TemporalTemporalAccessor子接口,增加了对时间的处理操作,像是plus()、minus()、with()等方法。

13.3.4年历系统设计

  • java.time套件中的类在需要实行年历系统时都是采用单一的ISO8601年历系统。如需要其他年历系统,则需要明确实行java.time.chrono中等操作了java.time.chrono.Chronology接口的类。

本周代码托管截图

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 1/3 30/50
第三周 500/1000 1/4 35/85
第四周 1225/2225 1/5 40/125
第五周 993/3218 1/6 35/160
第六周 1360/4578 2/7 40/200
第七周 228/4806 2/9 40/240

参考资料

20145240《Java程序设计》第七周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第七周学习总结

    1.本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: 源代码: //contains()方法 public boolean c ...

  2. 20145240 《Java程序设计》第九周学习总结

    20145240 <Java程序设计>第九周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作,开发人员无须接触底层数 ...

  3. 20145240《Java程序设计》第二周学习总结

    20145240 <Java程序设计>第二周学习总结 教材学习内容总结 本周主要学习了第三章的内容,讲的是Java的一些基础语法,包括两大系统类型.变量.运算符的基本使用.类型转换及几个基 ...

  4. 20145240《Java程序设计》第一周学习总结

    20145240 <Java程序设计>第一周学习总结 教材学习内容总结 第一周学习Java首先从最基本的下载.配置环境.了解基本人机命令行方式等基础知识,以及编写简单的"Hell ...

  5. 201871010106-丁宣元 《面向对象程序设计(java)》第七周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第七周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

  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. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

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

随机推荐

  1. CentOS 6.5 安装Gitlab 7.12.2

    官网环境要求 参见:https://github.com/gitlabhq/gitlabhq GitLab is a Ruby on Rails application that runs on th ...

  2. Mysql配置文件读取顺序

    On Unix, Linux and Mac OS X, MySQL programs read startup options from the following files, in the sp ...

  3. oracle密码过期解决方法

    Oracle提示错误消息ORA-28001: the password has expired 在oracle服务器上用sqlplus / as sysdba登录进去,可以通过下面的sql语句查看账户 ...

  4. Cut the rope

    http://acm.nyist.net/JudgeOnline/problem.php?pid=651 描述We have a rope whose length is L. We will cut ...

  5. 一个智障安装了一天的python和graphlab的血泪史

    大概的过程是这样的: 先装了python3.6.1.,然后发现搞错了Σ(  ̄□ ̄||),是32 bit的,卸了重装python 3.6.1 (64bit). 然后装easy_install.pip.i ...

  6. SQL Server 2008中如何为XML字段建立索引

    from:http://blog.csdn.net/tjvictor/article/details/4370771 SQL Server中的XML索引分为两类:主XML 索引和辅助XML索引.其中辅 ...

  7. 一道Google面试题——基数排序思想

    题目描述: 一个大小为n的数组,里面的数都属于范围[0,n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间. 算法分析: 这个题目要求用O(n)的时间复杂度,这意味着只 ...

  8. Balala Power!(大数+思维)

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  9. ASP.NET通过代码给TextBox添加事件(点击显示日历)

    private void BindDate() { tbApplyStartDate.Attributes.Add("onclick", "new Calendar(). ...

  10. 普通java工程的resources目录寻址

    问题: 普通java工程的src/main/resources目录下的配置文件如何寻址 在src/main/java目录下的代码中如何访问src/main/resources目录下的配置文件? Mav ...