20145239杜文超 《Java程序设计》第7周学习总结
20145239 《Java程序设计》第7周学习总结
教材学习内容总结
Lambda
认识Lambda语法
- Lambda语法概述:
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();
- 方法参考的特性,在重用现有API上扮演了重要角色。重用现有方法实作,可避免到处写下Lambda运算式,方法参考不仅避免了重复撰写Lambda表达式,也可以让程序代码更清楚.
- Lambda表达式与函数接口:
等号右边是Lambda表示式(Expression),等号左边是作为Lambda表示式的目标型态(Target type)
Comparator<String> byLength = (String name1,String name2)->name1.length() - name2.length();
如果有目标型态的话,在编译器可推断出类型的情况下,就可以不写出Lambda表示式的参数型态,例如:
Comparator<String> byLength = (name1,name2)->name1.length() - name2.length();
Lambda表示式本身是中性的,不代表任何型态的实例,同样的Lambda表示式,可用来表示不同目标型态的对象操作,例如:
Fun<String,Integer> func = (name1,name2)->name1.length() - name2.length();
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 |
参考资料
20145239杜文超 《Java程序设计》第7周学习总结的更多相关文章
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
- 20145239杜文超《网络对抗》- Web安全基础实践
20145239杜文超<网络对抗>- Web安全基础实践 基础问题回答 (1)SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查 ...
- 20145239杜文超《网络对抗》- Web基础
20145239杜文超<网络对抗>- Web基础 基础问题回答 1.什么是表单? 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等)输 ...
- 20145239杜文超《网络攻防》- MSF基础应用
20145239杜文超<网络攻防>- MSF基础应用 基础问题回答 1.用自己的话解释什么是exploit,payload,encode? exploit:实现攻击行为的主体,但没有载荷只 ...
- 20145239杜文超《网络对抗》- shellcode注入&Return-to-libc攻击深入
20145239杜文超<网络对抗>- shellcode注入&Return-to-libc攻击深入 shellcode基础知识 Shellcode是一段代码,作为数据发送给受攻击服 ...
- 20145239 杜文超 实验四 Android开发基础
20145239实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
随机推荐
- hdu 5381 The sum of gcd(线段树+gcd)
题目链接:hdu 5381 The sum of gcd 将查询离线处理,依照r排序,然后从左向右处理每一个A[i],碰到查询时处理.用线段树维护.每一个节点表示从[l,i]中以l为起始的区间gcd总 ...
- 13.2 处理静态资源【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/51637052目录(?)[-] 默认资源映射 自定义资源映射 自定义目录 使用外部目录 通过 ...
- Android性能优化Google课程翻译一:Render----OverDraw实战
Context 近期实战了下OverDraw,加深了下理解.在上篇文章里Android性能优化Google课程翻译一:Render----OverDraw 写过详细方法. OverDraw解决方法离不 ...
- java调试工具jdb
Finds and fixes bugs in Java platform programs. Synopsis jdb [options] [classname] [arguments] optio ...
- jquery ajax传参数问题
var fd = new FormData();//实例化表单,提交数据使用fd.append('imgUrl',imgUrl);//将files追加进去fd.append('typeId',type ...
- android开发笔记之fastboot的使用
fastboot命令大全 在终端中.我们输入: fastboot 对于这些命令.我不解释,慢慢使用.慢慢的就会明确是怎么回事了. android分区 分区 作用 splash1 开机画面.使用Nand ...
- Html简单的整页切换
恩,语言组织不是很好,直接上代码吧.... <!DOCTYPE html> <html> <head lang="en"> <meta c ...
- 如何在linux centos下安装git(转)
今天想开通github的服务,于是在服务器上安装git,百度到的结果千篇一律的全都有错误,给大家总结分享下. 如果yum install git可以直接安装的可以不通过源码编译安装. 源码安装步骤如下 ...
- android 集成QQ互联 (登录,分享)
参考:http://blog.csdn.net/syz8742874/article/details/39271117 http://blog.csdn.net/woblog/article/deta ...
- centOS7 安装nginx+php+mysql
nginx安装 本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好. 安装make: yum -y install gcc automa ...