20145240《Java程序设计》第七周学习总结
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
之前,GMT
与UT
是相同的3.国际原子时(TAI):秒的单位定义是基于
TAI
,也就是铯原子辐射振动次数。4.世界协调时间(UTC):
UTC
考虑了地球自转越来越慢而有闰秒修正,确保UTC
与UT
相差不会超过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.ChronoUnit
是TemporalUnit
实作类,使用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
定义了只读的时间对象读取操作,实际上Temporal
是TemporalAccessor
子接口,增加了对时间的处理操作,像是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程序设计》第七周学习总结的更多相关文章
- 201521123027 <java程序设计>第七周学习总结
1.本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: 源代码: //contains()方法 public boolean c ...
- 20145240 《Java程序设计》第九周学习总结
20145240 <Java程序设计>第九周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作,开发人员无须接触底层数 ...
- 20145240《Java程序设计》第二周学习总结
20145240 <Java程序设计>第二周学习总结 教材学习内容总结 本周主要学习了第三章的内容,讲的是Java的一些基础语法,包括两大系统类型.变量.运算符的基本使用.类型转换及几个基 ...
- 20145240《Java程序设计》第一周学习总结
20145240 <Java程序设计>第一周学习总结 教材学习内容总结 第一周学习Java首先从最基本的下载.配置环境.了解基本人机命令行方式等基础知识,以及编写简单的"Hell ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第七周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第七周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
随机推荐
- Eclipse 添加书签
Eclipse 添加书签 关于书签 Eclipse 中可以在编辑器的任意一行添加书签. 您可以使用书签作为提示信息,或者使用书签快速定位到文件中的指定的行. 添加书签 如果你想设置书签,你只需要在垂直 ...
- 更改centos 7 的默认启动为命令界面
vi /etc/inittab 可以看到这样两行: # To set a default target, run:# systemctl set-default TARGET.target 故: su ...
- ThinkPHP带表情无限级评论回复
今天就tp中(含表情)无限级评论回复做一个个人总结. 1.准备TP基本框架 2.数据库,数据表的建立 A.先说说数据库(表)的建立. a-1,数据库:blog a-2,数据表:bolg_comment ...
- js与jquery实时监听输入框值的oninput与onpropertychange方法
文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时监 ...
- cookie细节
设置cookie时,不像设置session,可以马上生效,它的生效时间是下一次请求页面.
- Unity3d 游戏退出界面1
功能需求:点击退出按钮,弹出“退出”UI,询问玩家是否退出游戏: 退出按钮 退出UI: publicclass GameQuit : MonoBehaviour { // 取消按钮 public G ...
- 错误命令“if not exist "\Dll" mkdir "\Dll" xcopy "\bin\Debug\*.*" "F:\647\VS项目\EtrolMes2014SY\Framework\Dll" /e /i /y”已退出,代码为 9009
分析错误 第一步:观察错误,发现plugin文件夹中未生成对应的编译文件. 第二步:XCOPY命令无法执行,百度xcopy为何无法执行 第三步,搜索,发现环境变量未配置正确. 就是环境变量path(大 ...
- 在Windows 7 (SP1)上安装Visual Studio 2015
背景说明:最近重装了Windows 7 系统,那就顺手装个Visual Studio 2015吧,没想到一案装就报错(具体没截图了).只有Windows8 或是Windows 10才能装 2015?答 ...
- ajax异步请求分页显示
html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- Python:itertools模块(转)
原文:http://www.cnblogs.com/cython/articles/2169009.html itertools模块包含很多创建迭代器的函数,可以用各种方式对数据进行循环操作,此模块中 ...