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

教材学习内容总结

第十三章 时间与日期

认识时间与日期

时间的度量

  • 格林威治标准时间(GMT),现已不作为标准时间使用,即使标注为GMT(格林威治时间),实际上谈到的的是UTC(Unix时间)时间。
  • 世界时(UT),通过观测远方星体跨过子午线而得,受地球自转速度影响有误差。
  • 秒的单位定义时基于TAI。也就是铯原子辐射的振动次数。
  • 世界协调时间(UTC),UTC考虑了地球自转越来越慢而有闰秒修正,确保UTC与UT相差不会超过0.9秒。
  • Unix时间,Unix系统时间表示法,定义为UTC时间1970年1月1日为起点经过的秒数,不考虑闰秒修正。
  • epoch,某个特定时间开始,时间轴上的某一瞬间。

年历简介

  • 儒略历:现今公历的前身,修正了罗马历隔三年设置一闰年的错误,改采四年一闰。
  • 格里高利历:改革了儒略历,将儒略历1582年10月4号星期四的隔天,订为格里高利历1582年10月15日星期五。
  • ISO 8601标准:统一时间日期的数据交换格式,例如:yyyy-mm-ddTHHH:MM:SS.SSS等。

时区

  • UTC偏移:精度每15度偏移1小时,通常表示Z符号。
  • 日观节约时间:夏、冬日照时间差异很大时实施。

认识Date与Calendar

时间轴上瞬间的Date

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

    相关练习代码见码云中的DateDemo.java,运行结果如下

格式化时间日期的DateFormat

  • DateFormat是个抽象类,其操作类是java.text.SimpleDateFormat,你可以直接构建SimpleDateFormat实例,或是使用DateFormat的getDateInstance()、getTimeInstance()、getDateTimeInstance等静态方法,用较简便方式按不同需求取得SimpleDateFormat实例。可以通过DateForm的各种静态方法进行格式化,使用模式字符串自定义格式,使用parse()方法将指定的字符串剖析为Date实例。

    相关练习代码见码云中的DateFormatDemo.java,运行结果如下

Calendar: 时间的运算

  • Calendar:想要取得某个时间日期信息,或者是对时间日期进行操作,可以使用Calendar实例。Calendar是个抽象类,java.util.GregorianCalendar是其子类,操作了儒略历与格里高利历的混合历。可以设定时间日期等字段,使用add()方法改变Calendar的时间,使用roll()方法加减日期中某个字段,使用after()或before()方法比较两个Calendar的时间日期先后。

    相关练习代码见码云中的CalendarUtil.java运行结果如下

设定TimeZone

  • 可以使用java.util.TimeZone的getDefault()来取得默认时区信息。

    相关练习代码见码云中的TimeZoneDemo.java以及TimeZoneDemo2.java运行结果分别如下

JDK8新时间日期API

机器时间 Instant

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

人类时间(ISO8601 标准)

  • LocalDateTime包括日期与时间;LocalDate只有日期,如果设定不存在的日期会抛出DateTimeException;LocalTime只有时间。
  • ZonedDateTime:当补上时区信息后组合起来的时间实际上不存在时,ZonedDateTime会自动更正。
  • 若需要时区信息,可基于上述三个时间描述的ZoneDateTime和OffsetDateTIme。相关练习代码见码云中的MonthDemo.java,运行结果如下

对时间的运算

  • TemporalAmount的操作类是Period和Duration。ofPattern()是java.time.format.DateTimeFormatter的静态方法,对于年、月、星期、日的日期差使用Period类定义,plus()方法可以接受Duration实例来计算,对于时间计量,类Duration来定义。
  • plus()方法另一重载版本接受java.time.temporal.TemporalUnit实例,java.time.temporal.ChronoUnit是TemporalUnit实作类,使用enum实作,定义了between()等方法。
  • TemporalAccessor定义了只读的时间对象。

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

  • 问题1:书上对于before()方法以及after()方法没有明确的指示,那么究竟是怎样一个机制呢?
  • 问题1解决方案:查询了API,得到如下结果

    before方法:

    public boolean before(Date when)测试此日期是否在指定日期之前。

    参数:when - 日期。

    返回:当且仅当此 Date 对象表示的瞬间比 when 表示的瞬间早,才返回 true;否则返回 false。

    抛出:

    NullPointerException - 如果 when 为 null。

    after方法

    public boolean after(Date when)测试此日期是否在指定日期之后。

    参数:when - 日期。

    返回:当且仅当此 Date 对象表示的瞬间比 when 表示的瞬间晚,才返回 true;否则返回 false。

    抛出:

    NullPointerException - 如果 when 为 null。

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

  • 问题1:在学习Calendar时练习的代码码云中的CalendarUtil.java时有如下代码
while (calendar.before(end)) {
calendar.add(Calendar.YEAR, 1);
years++;
}
return years -1;

返回值是在得到的years值上减去了1,这是为什么?

  • 问题1解决方案:问题1解决方案:将减去一去掉,再进行了编译,发现值大了一个,因此得到了自己的理解,这里的before是不是并不是真正意义上的before而更像是>=(大于等于)这样一个作用,上网查询之后发现的确有这样的问题,但并不是>=这样的关系,而是要根据设定的时间是自己设定的还是系统设定的来判断,也就是before和after方法的危险性。

代码托管

上周考试错题总结

  • 下面哪条命令可以把 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通过输出重定向实现了复制。
  • 下面代码中共有()个线程?

    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 {

    ...

    }

    答案:三个,不能忘记main这个主线程。
  • 如果有以下代码段:

    Thread thread = new Thread(new ________________() {

    public void run() {...}

    });

空白部分指定哪些类型可以通过编译?

A .

Runnable

B .

Thread

C .

Future

D .

Executor

答案: A B,解析:Thread类的构造方法中,需要一个实现了Runnable接口的对象,而new就是生成了个Runnable接口下的一个实例对象。而Thread 也实现了 Runnable 接口。

  • 调用线程的interrupt()方法 ,会抛出()异常对象?

    A .

    IOException

    B .

    IllegalStateException

    C .

    RuntimeException

    D .

    InterruptedException

    E .

    SecurityException

    答案:D、E
  1. class Calc {
  2. public static void main(String [] args) {
  3. try {
  4.     int x = Integer.parselnt ("42a") ;
  5. //insert code here
  6.     System.out.print ("oops");
  7. }
  8. }
  9. }

    下面哪行分别插入到第五行,会导致输 "oops" ?

    A .

    catch (IllegalArgumentException e) {

B .

} catch (IllegalStateException c) {

C .

} catch (NumbelFormatException n) {

D .

} catch (ClassCastException c) {

答案:A、C

  • Given an instance of a Stream, s, and a Collection, c, which are valid ways of creating a parallel stream? (Choose all that apply.)

    给定一个Stream的实例s,一个Collection的实例c, 下面哪些选项可以创建一个并行流?

A .

new ParallelStream(s)

B .

c.parallel()

C .

s.parallelStream()

D .

c.parallelStream()

E .

new ParallelStream(c)

F .

s.parallel()

答案:D、F,解析d ,f没有parallelstream这样的类,所以a和e不正确。在流类中定义的方法,以从现有流创建并行流( ) ;因此f是正确的,c是不正确的。在集合类中定义的从集合中创建并行流的方法是parallelstream ( );因此d是正确的,b是不正确的。

  • Assuming / is the root directory, which of the following are true statements? (Choose all that apply.)

A .

/home/parrot is an absolute path.

B .

/home/parrot is a directory.

C .

/home/parrot is a relative path.

D .

The path pointed to from a File object must exist.

E .

The parent of the path pointed to by a File object must exist.

答案:A,解析:以root目录开始的路径是绝对路径,因此a是正确的,c是不正确的。b不正确,因为路径可以是文件系统中的文件或目录。文件对象可能指文件系统中不存在的路径,因此d和e不正确。

  • What is the result of executing the following code? (Choose all that apply.)

    String line;

    Console c = System.console();

    Writer w = c.writer();

    if ((line = c.readLine()) != null)

    w.append(line);

    w.flush();

A .

The code runs without error but prints nothing.

B .

The code prints what was entered by the user.

C .

An ArrayIndexOutOfBoundsException might be thrown.

D .

A NullPointerException might be thrown.

E .

An IOException might be thrown.

F .

The code does not compile.

答案:B D E,解析:这是从控制台读取线路并将其写回控制台的正确代码,从而使选项b。选项d和e也是正确的。如果不存在con a,则会抛出nullpointerexception。附加()方法抛出anioexception。

  • Which of the following are true? (Choose all that apply.)

A .

A new Console object is created every time System.console() is called.

B .

Console can only be used for reading input and not writing output.

C .

Console is obtained using the singleton pattern.

D .

When getting a Console object, it might be null.

E .

When getting a Console object, it will never be null.

答案:C D,解析:控制台对象是由JVM创建的。因为只有一个存在,它是一个单例,多次激活密钥选项c是正确的.如果程序在没有控制台的环境中运行,系统。控制台( )返回null,使d也正确。关于控制台的其他语句不正确。

  • Which classes will allow the following to compile? (Choose all that apply.)

    InputStream is = new BufferedInputStream(new FileInputStream("zoo.txt"));

    InputStream wrapper = new _____(is);

A .

BufferedInputStream

B .

FileInputStream

C .

BufferedWriter

D .

ObjectInputStream

E .

ObjectOutputStream

F .

BufferedReader

答案: A D,解析:引用是inputstream对象,因此只允许高级别的输入流类。b不正确,因为fileinputstream是一个与文件资源直接交互的低级流,而不是流资源。c和f不正确,因为您可以-不直接在流上使用bufferedreader。e是不正确的,因为参考是inputstream,而不是outputstream。a和d是唯一正确的选项。请注意,bufferedinputstream可以封装两次,因为高级流可以采用其他高级别流。

  • Suppose that the file c:\book\java exists. Which of the following lines of code creates an object that represents the file? (Choose all that apply.)

A .

new File("c:\book\java");

B .

new File("c:\book\java");

C .

new File("c:/book/java");

D .

new File("c://book//java");

E .

None of the above

答案:B C,解析:选项b是正确的,因为Java要求用另一个反斜杠转义反斜杠。选项c也是正确的,因为Java在处理路径时会将斜杠转换为右边。

结对及互评

评分标准

  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

  • 参考示例

点评过的同学博客和代码

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

这周进行了实验同事学习了第十三章的内容,慢慢的似乎学会了一些学习java的方法,这周的任务不是很重,因此学习了上周的一部分内容以及一些代码,希望在接下来的Java学习时间中可以得到一些更好的java学习方法。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 20/20 1/4 20/20
第二周 145/165 1/5 12/32
第三周 411/576 1/6 16/48
第四周 1021/1597 1/7 25/73
第五周 1115/2712 1/8 28/103
第六周 1126/3838 1/9 20/123
第七周 574/4412 2/11 18/141

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

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

  • 计划学习时间:20小时

  • 实际学习时间:18小时

  • 改进情况:这周的任务不算很重,同事改进了一些方法,在时间上的安排好像更为合理了一些。

(有空多看看现代软件工程 课件

软件工程师能力自我评价表
)

参考资料

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

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

    20155306 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 Java语言访问数据库的一种规范,是一套API ...

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

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

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

    20155331 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC是什么? JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间独立 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. MySQL 、SQL MS Access、和 SQL Server 数据类型

    MySQL 数据类型 在 MySQL 中,有三种主要的类型:Text(文本).Number(数字)和 Date/Time(日期/时间)类型. Text 类型: 数据类型 描述 CHAR(size) 保 ...

  2. 如何使用 Jenkins、GitHub 和 Docker 在 Azure 中的 Linux VM 上创建开发基础结构

    若要将应用程序开发的生成和测试阶段自动化,可以使用持续集成和部署 (CI/CD) 管道. 本教程介绍如何在 Azure VM 上创建 CI/CD 管道,包括如何: 创建 Jenkins VM 安装并配 ...

  3. java中如何打war包

    1.利用jdk里的工具   例如我们要打包的文件在D:\Project:运行 cmd: cd D:\Project 进入D:\Project ,然后输入jar -cvf  Project.war *回 ...

  4. [翻译] TSMessages

    TSMessages https://github.com/KrauseFx/TSMessages This library provides an easy to use class to show ...

  5. Celery学习--- Celery操作之定时任务

    celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat 文件定时执行任务 项目前提: 安装并启动Redis celery_Sche ...

  6. C++用法总结

    1.C++的绝对值符号 如果是整形的,就是abs() 如果是浮点型的,是fabs() 这两个函数都从属于库函数math.h #include <cmath> or #include< ...

  7. 词组查询以及多值映射等SolrNet使用中的细节问题

    转自:http://www.duxuan.cn/doc/6896594.html

  8. 关于strip(切割)和 split(分开) 的区别

    plit(), 以括号里的东西为标准,把字符串分开成一个列表 strip(), "删除",括号里出现的东西,从两头开始往中间删除,直到遇到阻碍.中间就算有,也不会受影响 s10 = ...

  9. c++程序员学习go

    作为一个c++程序员学习go编程的笔记.首先声明本人文笔太差,当你阅读一点觉得实在无法阅读下去时请移步. 下载安装go,安装完毕后会增加系统环境变量path内容指定go程序所在目录,可以打开cmd输入 ...

  10. memcache分布式 存取

    Memcached分布式 Memcached虽然称为“分布式“缓存服务器,但服务器端并没有“分布式”的功能.Memcached的分布式完全是由客户端实现的.memcached是怎么实现分布式缓存的呢? ...