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

教材学习内容总结

认识时间与日期

时间的度量
  • 世界时:在1972年引入UTC之前,GMT与UT是相同的。

  • 国际原子时(TAI),秒的单位定义是基于TAI,也就是铯原子辐射振动次数。

  • 世界协调时间(UTC),UTC考虑了地球自转越来越慢而有闰秒修正,确保UTC与UT相差不会超过0.9秒。

  • 就目前来说,即使标注为GMT(无论是文件说明,或者是API的日期时间字符串描述),实际上谈到时间指的是UTC时间。

年历简介
  • 儒略历:修正了罗马历隔三年设置一闰年的错误,改采四年一闰。

  • 格里高利历:改革了儒略历。

  • ISO 8601标准:采用统一的数据格式。

认识时区
  • 每个地区的标准时间各不相同,涉及到地理、法律、经济、社会、政治等问题。

  • 为了让人们对时间的认知符合作息,因而设置了UTC偏移。

认识Date与Calendar

Date

取得系统时间,方法之一就是使用System.currentTimeMillis()方法,返回long类型整数,代表1970年1月1日0时0分0秒0毫秒至今经过的毫秒数。Date有两个构造函数可以使用,一个可使用epoch毫秒数构建,另一个为无自变量构造函数,内部亦是使用System.currentTimeMillis()取得毫秒数,调用getTime()可取得内部保存的epoch毫秒数值。

DateFormat

DateFormat是个抽象类,其操作类是java.text.SimpleDateFormat,可以处理字符串时间格式。可以通过DateForm的各种静态方法进行格式化,使用模式字符串自定义格式,使用parse()方法将指定的字符串剖析为Date实例。

Calendar
  • Date现在建议作为时间轴上的瞬间代表,要格式化时间日期则通过DateFormat,如果想要取得某个时间日期信息,或者是对时间日期进行操作,可以使用Calendar实例。

  • Calendar是个抽象类,java.util.GregorianCalendar是其子类,操作了儒略历与格里高利历的混合历,通过CalendargetInstance()取得的Calendar实例,默认就是取得GregorianCalendar实例。

设定TimeZone

Calendar时会使用默认时区,可以使用java.util.TimeZonegetDefault()来取得默认时区信息。

JDK8新时间日期API

机器时间观点的API

真正可靠的信息只有内含epoch毫秒数。同时也可以使用Instant的静态方法now()取得代表Java epoch毫秒数的Instant实例。

人类时间观点的API

LocalDateTime只包括时间与日期,LocalDate只有日期,LocalTime只有时间,他们都是对时间的描述,没有时区信息。

如果你的时间日期需要带有时区,LocalDate、LocalTime等来补充缺少的信息。

对时间的运算
  • TemporalAmountTemporalAmount的操作类是PeriodDurationofPattern()java.time.format.DateTimeFormatter的静态方法,对于年、月、星期、日的日期差使用Period类定义,plus()方法可以接受Duration实例来计算,对于时间计量,类Duration来定义。
  • TemporalUnitplus()方法另一重载版本接受java.time.temporal.TemporalUnit实例,java.time.temporal.ChronoUnitTemporalUnit实作类,使用enum实作,定义了between()等方法。
  • TemporalAccessor:定义了只读的时间对象读取操作,实际上Temporal是TemporalAccessor子接口,增加了对时间的处理操作,像是plus()minus()with()等方法。
年历系统设计

JDK8采单一年历系统设计。如果需要其他年历系统,则需要明确实行java.time.chrono中等操作了java.time.chrono.Chronology接口的类。

教材学习中的问题和解决过程

  • 问题1:书上P432的HowOld程序运行结果如下:

但其实这样计算得到的年龄并不准确,一年的毫秒数并不是如上面例子中那么简单计算的。

  • 问题1解决方案:更改后的代码如下:
import java.time.*;
import java.util.Scanner;
import static java.lang.System.out;public class HowOld2 {public static void main(String[] args) {out.print("輸入出生年月日(yyyy-mm-dd):");LocalDate birth = LocalDate.parse(new Scanner(System.in).nextLine());LocalDate now = LocalDate.now();Period period = Period.between(birth, now);out.printf("你活了 %d 年 %d 月 %d 日%n", period.getYears(), period.getMonths(), period.getDays());}
}

运行结果如下:

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

  • 问题1:书上435页的代码为什么要调用clone()?
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;}}
  • 问题1解决方案:

避免调用yearsBetween()、datsBetween()之后传入的Calendar自变量被修改,两个方法都对第一个自变量进行了clone()复制对象的动作。

  • 问题2:

教材p436页TimeZoneDemo.java代码结果时区ID显示的是Asia/Shanghai,为什么不是北京呢?

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());}
}
  • 问题2解决方案:

Java所支持的所有时区ID里面并没有Asia/Beijing,所以对于中国大陆时区的而言,显示的应该都是Asia/Shanghai。

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 错题1

下面哪条命令可以把 f1.txt 复制为 f2.txt ?

A .cp f1.txt f2.txt

B .copy f1.txt f2.txt

C .cat f1.txt > f2.tx

D .cp f1.txt | f2.tx

E .copy f1.txt | f2.tx

正确答案: A C

总结:copy是Windows下的命令。cat f1.txt > f2.tx 通过输出重定向实现了复制。

  • 错题2

下面代码中共有()个线程?

public class ThreadTest {public static void main(String args[]){MyThread myThread =new MyThread();Thread t1=new Thread(myThread);Thread t2=new Thread(myThread);t1.start();t2.start();}
}
class MyThread extends Thread {...
}

A .1

B .2

C .3

D .4

答案:C

错误原因:忘了main所在的主线程。

  • 错题3
    如果有以下代码段:
Thread thread = new Thread(new ________________() {public void run() {...}
});

空白部分指定哪些类型可以通过编译?
A .
Runnable
B .
Thread
C .
Future
D .
Executor

答案:AB

总结:查API文档,Thread 也实现了 Runnable 接口

  • 错题4:
1. class Calc {2.  public static void main(String [] args) {3.    try {4.         int x = Integer.parselnt ("42a") ;5.     //insert code here6.         System.out.print ("oops");7.    }8.   }9. }

下面哪行分别插入到第五行,会导致输 "oops" ?
A .
catch (IllegalArgumentException e) {

B .
} catch (IllegalStateException c) {

C .
} catch (NumbelFormatException n) {

D .
} catch (ClassCastException c) {

答案:AC

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)
    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)
    • 一周提交次数少于20次的不加分
  6. 其他加分:
    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:
    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况

    • 结对同学学号20155213
    • 结对照片
    • 结对学习内容
  • 上周博客互评情况
    • 学号20155213
    • 学号20155227
    • 学号20155309
    • 学号20155311

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

本周已经是自学java的第七周了,逐渐习惯了这种学习模式,但是通过这周的考试发现了自己学习中的很多问题。不仅仅是对教材基本内容的学习太过于表面,更大的问题是自己思考问题的思维能力不足,所以考试成绩十分糟糕。接下来要做的就是要学会自己总结提高,希望能摆脱现在的状态。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 10/10 1/1 20/20
第二周 98/108 1/2 20/40
第三周 401/509 1/3 15/55
第四周 700/1209 1/4 20/75
第五周 632/1841 1/5 20/95 了解Java的异常处理,学习Collection和Map架构
第六周 1040/2881 1/6 13/108 了解串流设计和线程
第七周 479/3360 2/8 15/123 了解Date及其相关知识,完成第一次实验

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难,软件工程 估计方法

  • 计划学习时间:20小时

  • 实际学习时间:15小时

  • 改进情况:不要仅仅是看书,要多思考。

(有空多看看现代软件工程 课件
软件工程师能力自我评价表)

参考资料

  • Java学习笔记(第8版)

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

转载于:https://www.cnblogs.com/guyanlin/p/6681626.html

20155227 2016-2017-2 《Java程序设计》第七周学习总结相关推荐

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

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

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

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

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

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

  4. 20175227张雪莹 2018-2019-2 《Java程序设计》第九周学习总结

    20175227张雪莹 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十一章 JDBC数据库操作 MySQL数据库管理系统 下载安装MySQL 若下载的是 ...

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

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

  6. 20155210潘滢昊 2016-2017-2《Java程序设计》第一周学习总结

    20155210 2016-2017-2<Java程序设计>第一周学习总结 教材学习内容总结 1.1.1: 本节主要讲了Java的由来,1995年5月23日是Java公认的诞生日.还有版本 ...

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

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

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

    20172318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 在教材中基本明白了计算机系统的运行方式,了解了对于高级语言是使用是掌握好编程的关键,掌握了一 ...

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

    20175208 2018-2019-2 <Java程序设计>第九周学习总结 一.教材学习内容总结: 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系 ...

  10. 20175204 张湲祯 2018-2019-2《Java程序设计》第九周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第九周学习总结 教材学习内容总结 -第十一章JDBC和MySQL数据库要点: 1.下载MySQL和客户端管理工具navi ...

最新文章

  1. Mars说光场(4)— 光场显示
  2. (理论篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝
  3. 机器学习有很多关于核函数的说法,核函数的定义和作用是什么?
  4. Python常见问题(6):Python在Windows上的问题 Python on Windows FAQ
  5. 网页代码抓取工具_MAC网页颜色代码提取工具
  6. 如何避免Java线程中的死锁?
  7. solaris下用户不能正常登录CDE界面的解决办法
  8. java学习过程记录
  9. linux UID的长度,linux下文件数、目录数、文件名长度的各种限制
  10. 【渝粤教育】电大中专Office办公软件_1作业 题库
  11. springboot毕设项目基于springboot的小区旧物交易系统的设计与实现j8o94(java+VUE+Mybatis+Maven+Mysql)
  12. [资源]C++书籍之 C++ Primer Plus (第6版)中文版
  13. 冰冻三尺,非一日之寒。数据解析——xpath(1)
  14. 2005年上半年程序员上 下午试题及答案
  15. 使用Qt绘制二维码 QRcode
  16. docker: Error response from daemon: Conflict. The container name “/mysql“ is already in use by conta
  17. Datawhale-深入浅出pytorch简介安装和基础知识
  18. 新买的苹果11如何验真假
  19. iptable防火墙(一)
  20. 【重要】一部手机失窃而揭露的黑色产业链—完整修订版

热门文章

  1. Feathers组件--之--列表
  2. 放一下自己的拙作——《用Webshell做隐藏BBS管理员》
  3. 【计算机毕业设计】006基于SpringBoot的网上订餐系统
  4. MySQL安装教程(超详细教程)
  5. 系统架构设计师学习资料
  6. matlab生成指定大小的figure,matlab 为图像添加jet伪彩色,并添加color bar;保存figure图片; 对图像进行高斯模糊;
  7. 面试题:为什么使用消息队列?消息队列有什么优缺点?
  8. 如何解决直播姬电脑手机转播没有声音的问题
  9. [Delphi]切换鼠标左右按键
  10. 激光AGV叉车选型步骤及方法