20145221 《Java程序设计》第七周学习总结
20145221 《Java程序设计》第七周学习总结
教材学习内容总结
第十二章部分 - Lambda
认识Lambda语法
- Lambda去可以重复,符合DRY原则,而且Lambda表达式可读性更好,操作更简单
- 匿名类型最大的问题就在于其冗余的语法,lambda表达式是匿名方法,它提供了轻量级的语法,从而解决了匿名内部类带来的冗余问题。
- 示例:
(int x, int y) -> x + y;
() -> 42;
(String s) -> { System.out.println(s);
第一个lambda表达式接收x和y这两个整形参数并返回它们的和;第二个lambda表达式不接收参数,返回整数'42';第三个lambda表达式接收一个字符串并把它打印到控制台,不返回值。
- 接口默认方法:在JDK8中,interface定义时可以加入默认操作,或者称为默认方法(Default methods),forEach()方法本身已有操作,所以不会破坏Iterable现有的其他操作。在默认方法中不能使用数据成员,因为接口本身不能定义数据成员,也就是默认方法中不能用直接变更状态的流程。
Functional与Stream API
- 使用Optional代替null
- 标准API的函数接口
- Consumer:一个参数,无返回值
- Function:一个参数,有返回值
- Predicate:一个参数,有返回值,返回值必须是boolean类型的
- Supplier:无参数,有返回值
- Stream与管道
Lambda与并行处理
第十三章部分 - 时间与日期
认识时间与日期
- 时间的度量
- GMT(Greenwich Mean Time)时间:现在不是标准时间
- 世界时(Universal Time,UT):1972年UTC出来之前,UT等价于GMT
- 国际原子时(TAI):秒的定义
- 世界协调时间(Corrdinated Universal Time, UTC): 闰秒
- Unix时间: 1970.1.1 00:00:00开始的秒数
- epoch: java.util.Date epoch毫秒数
- 日历
- 儒略历(Julian Calendar)
儒略历是现今公历的前身,用来取代罗马历,修正了罗马历隔三年设置一闰年的错误,改采四年一闰。 - 格里高利历(Gregorian Calendar)
格里高利历将儒略历1582年10月4日星期四的隔天,订为格里高利历1582年10月15日星期五。 - ISO8601 标准
ISO 8601并非年历系统,而是时间日期表示方法的标准,用意统一时间日期的数据交换格式。在ISO 8601标准的定义中,19世纪是指1900年到1999年,而格里高利历的19世纪是指1801年到1900年。
- 儒略历(Julian Calendar)
认识Date与Calendar
- 时区:考虑了UTC偏移的时间表示上,通常会标识Z符号。
- Date与DateFormat
- Date:使用System.currentTimeMillis()方法,返回的是long类型的整数,代表1970年1月1日00:00:00至今经过的毫秒数,只用来获取epoch毫秒数。
- DateFormat是个抽象类,其操作类是java.text.SimpleDateFormat,用来格式化成人类理解的年月日时分秒。
- Calendar: 时间的运算
- getInstance(): 要取得某个时间日期资讯,或者是对时间日期进行操作,可以使用Calendar实例,通过Calendar的getInstance()取得的Calendar实例,默认就是取得GregorianCalendar实例
- getTime():取得Calendar实例后,可以使用getTime()取得Date实例
- get():如果想要取得年月日等日期时间字段,可以使用get()方法指定Calender上的字段枚举常数
- add():改变实例的时间
- roll():如果打算只针对日期中某个字段加减,则可以使用roll()方法
- after():比较两个实例的日期先后
- before():比较两个实例的日期先后
- ...
JDK8新时间日期API
- 机器时间 Instant
- Calendar的getTime()返回false实例,取得Date实例,下一步应该获取时间信息,应该是通过Date的getTime()取得epoch毫秒数
- 用以代表自定义的Java epoch之后的某个时间点历经的毫秒数,精确度基本上是毫秒。使用Instant的静态方法now()取得代表Java epoch毫秒数的Instant实例,取得Instant实例后,可以使用plusSeconds()、plusMillis()、plusNanos()、minusSeconds()、minusMillis()、minusNanos()来做时间轴上的运算,Instant实例本身不会变动,这些操作会返回新的Instant实例,代表运算后的瞬时
- 人类时间(ISO8601 标准)
- LocalDateTime:包括日期与时间
- LocalDate:只有日期
- LocalTime:只有时间
- ZonedDateTime:时区的日期与时间
- OffsetdateTime:代表UTC偏移量
- Year:表示年
- YearMonth:表示年月
- Month:表示月
- MonthDay:表示月日
代码调试中的问题和解决过程
问题一:
教材P435页提到“想比较两个Calendar的时间日期先后,可以使用
after()
和before()
方法”,但是书中没有给出具体的例子,不知道是什么用法,应该传入什么样的参数。不过通过查询API可知:
从而也可以推测出
before()的用法
,与after()
恰好相反。
问题二:
教材p430页DateFormatDemo.java代码运行结果:
这段代码与书中的格式不同,上述输出应该是正确的。
问题三:
教材p436页TimeZoneDemo.java代码运行结果:
时区ID显示的是
Asia/Shanghai
,为什么不是北京呢?通过查阅相关资料,发现Java所支持的所有时区ID里面并没有Asia/Beijing
,所以对于中国大陆时区的而言,显示的应该都是Asia/Shanghai
其他(感悟、思考等,可选)
这周内容因为只要求一章内容,学习任务相对来说较为轻松。本次接触到了Java中的时间,认识到Java中对时间的处理机制,感觉Java还是很严谨细致的,时间虽然很重要,但在平时真的很少有专门关注到它,这次通过Java的学习,从时间到时区都大致了解了一下,也对Java中的处理方式有了初步的理解。
Java后面的知识还是不能活学活用,用起来比较生疏,或是用的时候已经记不清楚书中所讲。就像最近我感觉我对C语言的掌握加强了一样,因为其余几门实验都是用C编的,也只有反复应用才可能提升编程技术了。所以Java的提高,需要以后多实践,在实践中总结经验,提升能力。
【附1】托管截图:
【附2】用cloc.exe统计代码如下:
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/6 | 20/20 | 学会MarkdownPad2 |
第二周 | 150/350 | 1/7 | 15/35 | 理解了补码机制 |
第三周 | 500/850 | 1/8 | 25/60 | 初步了解了对象 |
第四周 | 1231/2081 | 1/9 | 27/87 | 初步了解了继承与接口 |
第五周 | 749/2930 | 3/12 | 30/117 | 了解了异常处理 |
第六周 | 1057/3987 | 2/11 | 24/111 | 初步了解输入输出与线程 |
第七周 | 371/4358 | 3/14 | 25/136 | 了解Java中的时间 |
参考资料
20145221 《Java程序设计》第七周学习总结的更多相关文章
- 201521123027 <java程序设计>第七周学习总结
1.本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: 源代码: //contains()方法 public boolean c ...
- 20145221 《Java程序设计》第九周学习总结
20145221 <Java程序设计>第九周学习总结 教材学习内容总结 整合数据库 JDBC入门 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行 ...
- 20145221 《Java程序设计》第二周学习总结
20145221 <Java程序设计>第二周学习总结 教材学习内容总结 第二周内容已在假期完成,详见博客: <Java程序设计>第三章-基础语法 代码调试中的问题和解决过程 第 ...
- 20145221 《Java程序设计》第一周学习总结
20145221 <Java程序设计>第一周学习总结 教材学习内容总结 第一周内容已在假期完成,详见博客: Hello Java! 开源中国的代码托管 代码调试中的问题和解决过程 第一周内 ...
- 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 ...
随机推荐
- Objective-c为什么要有属性
属性:为什么要有属性 . 首先是因为实例变量的安全性和继承能力,如果我们允许被继承,子类要动这些实例变量,我们需要能够参与进来,如果子类设置了某个值,我们需要检查范围,保证不会破坏父类,保证不会破坏父 ...
- poj_1456 贪心
题目大意 一家超市,要卖出N种物品(每种物品各一个),每种物品都有一个卖出截止日期Di(在该日期之前卖出可以获得收益,否则就无法卖出),且每种物品被卖出都有一个收益值Pi. 卖出每个物品需要耗时1天, ...
- Android Framewrork资源类型有哪些?
1. Google Framework res frameworks/base/core/res/res/values <public type="attr" name=&q ...
- IIS的安装和配置
一.首先是安装IIS.打开控制面板,找到“程序与功能” 二. “打开或关闭Windows功能”, 安装 “Internet 信息服务” 三. 安装完后回控制面板里面,找到“管理工具” 四. 双击“In ...
- 1.Math函数对象
// 属性 Math.E //自然对数的底数(2.718281828459045) Math.PI //圆周率(3.141592653589793) Math.LN2 //2的自然对数(0.69314 ...
- 【BZOJ2251】[2010Beijing Wc]外星联络 后缀数组
[BZOJ2251][2010Beijing Wc]外星联络 Description 小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻找外星人的事业.于是, ...
- Android TextView文字透明度和背景透明度设置
textview1.setTextColor(Color.argb(255, 0, 255, 0)); //文字透明度 控件设为半透明: 控件名.getBackground().setAlpha(in ...
- POM(project Object Model) Maven包管理依赖 pom.xml文件
什么是POM POM全称为“Project Object Model”,意思是工程对象模型.Maven工程使用pom.xml来指定工程配置信息,和其他文本信息.该配置文件以xml为格式,使用xml语法 ...
- Jenkins之pipeline流水线配置
使用gitlab监听事件一旦git push自动部署 使用构建后操作 配置完用户构建前一步会自动构建下一个项目 pipeline插件 新建视图 点击run运行
- PL/SQL Developer登入时候报ORA-12638
在client安装目录,找到打开sqlnet.ora 在里面找到 SQLNET.AUTHENTICATION_SERVICES= (NTS)将其更改为: SQLNET.AUTHENTICATION_S ...