学号20145220《Java程序设计》第7周学习总结

教材学习内容总结

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接口的类。

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

通过近一个月的学习,我对jave这门课程产生了浓厚的兴趣,我希望可以和老师多多互动,多多交流,更好的学习jave。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3000行 30篇 400小时
第一周 100/100 2/2 20/20
第二周 100/200 2/4 18/38
第三周 300/500 3/7 22/60

参考资料

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

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

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. vim的编码设置

    VIM的相关字符编码主要有三个参数 fencs: 它是一个编码格式的猜测列表.当用vim打开某个文件时,会依次取这里面的编码进行解码,如果某个编码格式从头至尾解码正确,那么就用那个编码 fenc:它是 ...

  2. 应用程序池“Classic .NET AppPool”将被自动禁用

    原文:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28972779&id=3868008 服务器 Server 20 ...

  3. Linux下备份系统至另一硬盘

    首先会想到dd命令. 但,, 1,若是小硬盘还好,上T的大硬盘这样做肯定不明智; 2,况且dd是在硬件层面的拷贝,前面的MBR也会随之恢复到另一个盘,若源硬盘是100G,目标盘是200G,又会出问题, ...

  4. Controller方法的返回值

    方法的返回值1.ModelAndView这个就不多说,这是最基础的,前面定义一个ModelAndView,中途使用addObject方法添加属性,再返回.视图解析器会自动扫描到的.2.String这个 ...

  5. JS constructor

    1.每个对象都有一个constructor,都指向创建该对象的方法. 2.function对象的prototype的constructor也是指向该方法.如果对prototype进行重写,constr ...

  6. Tomcat 网站部署(三)

    一.Tomcat的部署方式有以下两种 1.自动部署 2.虚拟目录 二.自动部署 文件必须放在放在webapps就可以了,可以用这样访问 http://localhost:8080/放在webapps目 ...

  7. C#基础--面向过程计算器

    //面向过程计算器 //思路: 需要注意的是: 两个数相除 除数不能为0: //1.提示用户输入 //2.进行运算 //3.得到结果 Console.WriteLine("请输入第一个数字: ...

  8. 模拟http或https请求,实现ssl下的bugzilla登录、新增BUG,保持会话以及处理token

    1.增加相应httpclient 需要的jar包到工程,如果是maven工程请在pom.xml增加以下配置即可: <dependency> <groupId>org.apach ...

  9. 使用HackRF+GNU Radio 破解吉普车钥匙信号

    引文 我最近对软件定义的无线电技术(SDR)产生了浓厚的兴趣,而我对其中一款流行的SDR平台(HackRF)也产生了兴趣,而其频率接收的范围也在1MHz ~6GHz之间(范围较广).而这里也需要提及一 ...

  10. “Compiled” Python files

    To speed up loading modules, Python caches the compiled version of each module in the __pycache__ di ...