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

教材学习内容总结

Lambda

认识Lambda语法

  • Lambda语法概述:
  1. Arrays的sort()方法可以用来排序,在使用sort()时,需要操作java.util.Comparator来进行说明,这样一来,语法就显得有些冗长。在JDK8中,可以使用Lambda语法改变Arrays.sort()的可读性:

    Comparator<String> byLength = (String name1,String name2)->name1.length() - name2.length();

    编译器可以从byLength变量的声明类型,推断name1与name2的类型,因此可以再简化为:

    Comparator<String> byLength = (name1,name2)->name1.length() - name2.length();

  2. 方法参考的特性,在重用现有API上扮演了重要角色。重用现有方法实作,可避免到处写下Lambda运算式,方法参考不仅避免了重复撰写Lambda表达式,也可以让程序代码更清楚.
  • Lambda表达式与函数接口:
  1. 等号右边是Lambda表示式(Expression),等号左边是作为Lambda表示式的目标型态(Target type)

    Comparator<String> byLength = (String name1,String name2)->name1.length() - name2.length();

  2. 如果有目标型态的话,在编译器可推断出类型的情况下,就可以不写出Lambda表示式的参数型态,例如:

    Comparator<String> byLength = (name1,name2)->name1.length() - name2.length();

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

    Fun<String,Integer> func = (name1,name2)->name1.length() - name2.length();

  3. JDK8的Lambda并没有导入新类型来作为Lambda表达式的类型,而是就现有的interface语法来定义函数接口,作为Lambda表达式的目标类型。Lambda表达式只关心方法签署上的参数与返回定义,但忽略方法名称,有个新标注@FunctionalInterface在JDK8中被引入,它可以这么使用:

    @FunctionalInterface public iterface Func<P,R>{ R apply(P p); }

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

 认识时间与日期

  • 时间的度量

  1.格林威治时间(GMT):通过观察太阳而得,因为地球公转轨道为椭圆形且速度不一,本身自传减速而造成误差。

  2.世界时(UT):通过观测远方星体跨过子午线而得,受地球自转速度影响有误差。

  3.国际原子时(TAI):将秒的国际单位定义为铯原子辐射振动9192631770周耗费的时间。

  4.世界协调时间(UTC):保持TAI和UT时间误差不要过大采用了闰秒修正。

  5.Unix时间:Unix系统时间表示法,定义为UTC时间1970年1月1日为起点经过的秒数,不考虑闰秒修正。

  6.epoch:某个特定时间开始,时间轴上的某一瞬间。

  • 年历

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

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

  3.ISO 8601标准:统一时间日期的数据交换格式,例如:yyyy-mm-ddTHHH:MM:SS.SSS等。

  • 时区

  1.UTC偏移:精度每15度偏移1小时,通常表示Z符号。

  2.日观节约时间:夏、冬日照时间差异很大时实施。

JDK8新时间日期API

  • 机器时间 Instant

    许多开发者并不知道过去有过日光节约时间,在取得Date实例后,被名称Date误导,认为他们代表日期,真正可靠的信息只有内含epoch毫秒数。所以不应该使用Data实例来得知人类观点的时间信息,可以使用Instant的静态方法now()取得代表Java epoch毫秒数的Instant实例。

  • 人类时间(ISO8601 标准)

    1.LocalDateTime:包括日期与时间。

    2.LocalDate:只有日期,设定不存在的日期时会抛出DateTimeException错误。

    3.LocalTime:只有时间。

    4.ZonedDateTime:当补上时区信息后组合起来的时间实际上不存在时,ZonedDateTime会自动更正。

5.Year、YearMonth、Month、MonthDay:如果只想要表示年或月,使用Year或Month;如果想要表示年月或月日,使用YearMonth或MonthDay。

  • 对时间的运算

1.TemporalAmount:TemporalAmount的操作类是Period和Duration。ofPattern()是java.time.format.DateTimeFormatter的静态方法,对于年、月、星期、日的日期差使用Period类定义,plus()方法可以接受Duration实例来计算,对于时间计量,类Duration来定义。

2.TemporalUnit:plus()方法另一重载版本接受java.time.temporal.TemporalUnit实例,java.time.temporal.ChronoUnit是TemporalUnit实作类,使用enum实作,定义了between()等方法。

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

代码调试中的问题和解决过程

import java.util.*;
import static java.lang.System.*;public class DateDemo {public static void main(String[] args) {Date date1 = new Date(currentTimeMillis());Date date2 = new Date();out.println(date1.getTime());out.println(date2.getTime());}
}

package ch12;import java.util.*;
import static java.lang.System.out;
import static java.text.DateFormat.*;public class DateFormatDemo {public static void main(String[] args) {Date date = new Date();dateInstanceDemo(date);timeInstanceDemo(date);dateTimeInstanceDemo(date);}static void dateInstanceDemo(Date date) {out.println("getDateInstance() demo");out.printf("\tSHORT: %s%n", getDateInstance(LONG).format(date));out.printf("\tSHORT: %s%n", getDateInstance(SHORT).format(date));}static void timeInstanceDemo(Date date) {out.println("getTimeInstance() demo");out.printf("\tLONG: %s%n", getTimeInstance(LONG).format(date));out.printf("\tMEDIUM: %s%n", getTimeInstance(MEDIUM).format(date));out.printf("\tSHORT: %s%n",getTimeInstance(SHORT).format(date));}static void dateTimeInstanceDemo(Date date) {out.println("getDateTimeInstance() demo");out.printf("\tLONG: %s%n",getDateTimeInstance(LONG, LONG).format(date));out.printf("\tMEDIUM: %s%n",getDateTimeInstance(SHORT, MEDIUM).format(date));out.printf("\tSHORT: %s%n",getDateTimeInstance(SHORT, SHORT).format(date));}
}

package ch12;import java.text.*;
import java.util.*;public class CurrentTime {public static void main(String[] args) {DateFormat dateFormat = new SimpleDateFormat(args.length == 0 ? "EE-MM-dd-yyyy" : args[0]);System.out.println(dateFormat.format(new Date()));}
}

import java.util.*;
import java.text.*;public class Howold {public static void main(String[] args) throws Exception {System.out.print("输入出生年月日(yyyy-mm-dd):");DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");Date birthDate = dateFormat.parse(new Scanner(System.in).nextLine());Date currentDate = new Date();long life = currentDate.getTime() - birthDate.getTime();System.out.println("你今年的岁数为:" +(life / (365 * 24 * 60 * 60 * 1000L)));}
}

package ch12;import static java.lang.System.out;
import java.util.Calendar;public class CalendarUtil {public static void main(String[] args) {Calendar birth = Calendar.getInstance();birth.set(1975, Calendar.MAY, 26);Calendar now = Calendar.getInstance();out.printf("岁数:%d%n", yearsBetween(birth, now));out.printf("天数:%d%n", daysBetween(birth, now));}public static long yearsBetween(Calendar begin, Calendar end) {Calendar calendar = (Calendar) begin.clone();long years = 0;while (calendar.before(end)) {calendar.add(Calendar.YEAR, 1);years++;}return years - 1;}public static long daysBetween(Calendar begin, Calendar end) {Calendar calendar = (Calendar) begin.clone();long days = 0;while (calendar.before(end)) {calendar.add(Calendar.DATE, 1);days++;}return days - 1;}
}

package ch12;import static java.lang.System.out;
import java.util.TimeZone;public class TimeZoneDemo {public static void main(String[] args) {TimeZone timeZone = TimeZone.getDefault();out.println(timeZone.getDisplayName());out.println("\t时区ID:" + timeZone.getID());out.println("\t日光节约时数:" + timeZone.getDSTSavings());out.println("\tUTC 偏移毫秒数:" + timeZone.getRawOffset());}
}

本周代码托管截图

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

本周的内容比较少,我感觉比前几章易于理解,大部分书上的代码敲进去后都运行成功了,给了我很大的信心。这两周除了学习以外学生活动那边也比较忙碌,过了这段时间

我想我或许应该加大投入java学习的时间。

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时  
第一周 150/150 1/2 15/15  
第二周 350/500 1/2 20/35  
第三周 400/900 1/2 35/70  
第四周 900/1000 1/2 40/110  
第五周 1000/1500 1/2 30/140  
第六周 1400/1500 2/2 30/170  
第七周 400/400 2/2 15/185  

参考资料

  • Java学习笔记(第8版)
  • 《Java学习笔记(第8版)》学习指导

转载于:https://www.cnblogs.com/dwc929210354/p/5402096.html

20145239杜文超 《Java程序设计》第7周学习总结相关推荐

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

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

  2. 20145239杜文超《网络对抗》- Web安全基础实践

    20145239杜文超<网络对抗>- Web安全基础实践 基础问题回答 (1)SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查 ...

  3. 20155227 2016-2017-2 《Java程序设计》第九周学习总结

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

  4. 20155313 2016-2017-2 《Java程序设计》第二周学习总结

    20155313 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 1.1 基本类型 整数:可细分为short整数(占2字节).int整数(占4字节)与long ...

  5. 20155226 2016-2017-2 《Java程序设计》第一周学习总结

    20155226 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一周主要学习了一二章的内容,也浏览了剩余章节,以下是本周主要学习内容总结 1.首先了解了[ ...

  6. 20172325 2018-2019-1 《Java程序设计》第二周学习总结

    20172325 2018-2019-1 <Java程序设计>第二周学习总结 教材学习内容总结 3.1集合 集合是一种聚集.组织了其他对象的对象.集合可以分为两大类:线性集合和非线性集合. ...

  7. 20155229 2016-2007-2 《Java程序设计》第一周学习总结

    20155229 2016-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 1~18章的提问: 第一章:怎样撰写Java才不会沦于死背API文件.使用"复制. ...

  8. 20155303 2016-2017-2 《Java程序设计》第一周学习总结

    20155303 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 Chapter1 Java平台概论:MyProgr ...

  9. 20155305乔磊2016-2017-2《Java程序设计》第九周学习总结

    20155305 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 JDBC简介 1.JDBC是java联机数据库的标准规范,它定义了一组标准类与 ...

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

    20175317 <Java程序设计>第一周学习总结 教材学习内容总结 本周学习了Java大致的开发步骤,完成了课件自带的习题. 学习了在windows与Linux系统下不同的编译方法,掌 ...

最新文章

  1. Spring深入理解-Spring框架设计理念
  2. 【linux】Linux cp命令拷贝 不覆盖原有的文件
  3. CCF 2014-3-2 窗口
  4. java8实现Joiner:数组集合转换字符串
  5. 计算机软件国民经济行业代码,国民经济行业类别及代码.DOC
  6. Endnotex8在office2013中加载时崩溃的解决方案(基于win7系统win10的没测试过)
  7. 倍福PLC TwinCAT 3 基础——编程基础
  8. matlab编程求20的阶乘和,matlab编程求20的阶乘
  9. 编译器-有限自动机和正则表达式
  10. sass-------sass的基本介绍、node.js的sass工具
  11. 「 Gazebo仿真 」地图创建、多模型显示、基本指令
  12. vertical-align相关解析+图片居中
  13. python文件流_python--文件流读写
  14. QT案例实战1 - 从零开始编写一个OCR工具软件 (7) 屏幕截图/图像展示/文字识别
  15. 分享一下我的一些学习方法
  16. flutter如何获取连接高德地图的SHA1和PackageName
  17. C语言顺序程序设计练习题-求圆柱体的相关信息
  18. 北京租房子被骗---------每日反省篇
  19. linux服务器科学上网,开源一年,openGauss诠释什么是快速成长
  20. 第6章 引导启动程序boot

热门文章

  1. arm hisiv100 linux,hisiv100交叉编译工具链安装
  2. dnf最新地图编号2020_2020手游崛起端游没落?网易新端游好玩刺激能搬砖,网友:妙...
  3. android 宽度动画,android – ObjectAnimator对LinearLayout宽度进行动画处理
  4. 实现元素拖拽放大缩小_Vue实战067:DOM元素拖拽效果的实现
  5. 接口规范 14.转码接口
  6. python和jsp交互_Servlet与JSP进阶
  7. Linux环境通过java虚拟机定位程序问题位置的方法
  8. C++ 实现把非静态成员函数作为回调函数(非static)
  9. linux系统下修改某个文件夹下所有的文件权限
  10. Centos7 连接Serial串口记录