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. Grunt-学习。

    Grunt 依赖 Node.js 所以在安装之前确保你安装了 Node.js.然后开始安装 Grunt 实际上,安装的并不是 Grunt,而是 Grunt-cli,也就是命令行的 Grunt,这样你就 ...

  2. [翻译] DBCamera 轻量级定制摄像头

    DBCamera 轻量级定制摄像头 https://github.com/danielebogo/DBCamera DBCamera is a simple custom camera with AV ...

  3. oracle PL/SQL调用Java生成Excel

    现在有个需求,  要求编写oracle存储过程生成Excel文件到指定目录,  但是oracle自己的API貌似不太给力,  所以只能通过另一种更强大的语言来实现了  ——Java.有一个Java框架 ...

  4. C# Socket编程 笔记,Socket 详解,入门简单

    目录 一,网络基础 二,Socket 对象 三,Bind() 绑定与 Connect() 连接 四,Listen() 监听请求连接 和 Accept() 接收连接请求 五,Receive() 与 Se ...

  5. September 18th 2017 Week 38th Monday

    The only person you should try to be better than is the person you were yesterday. 你唯一应该试着去超越的人,是昨天的 ...

  6. November 19th 2016 Week 47th Saturday

    Nature didn't need an operation to be beautiful. It just was. 自然之美无需刻意而为,其本身即为美. Recently I saw seve ...

  7. 面向对象程序设计_课堂作业_01_Circle

    The 1st classwork of the C++ program 题目: Create a program that asks for the radius of a circle and p ...

  8. DSU on Tree浅谈

    DSU on tree 在之前的一次比赛中,学长向我们讲了了这样一个神奇的思想:DSU on tree(树上启发式合并),看上去就非常厉害--但实际上是非常暴力的一种做法;不过暴力只是看上去暴力,它在 ...

  9. NSKeyValueObserving.m

    https://github.com/farcaller/cocotron/blob/af740de86c9bee84c59ffc74d27e5df9e22e1391/Foundation/NSKey ...

  10. 用php代码统计数据库中符合条件的行数

    $sql1 = "select count(*) from t_user where age<17"; $data1 = mysql_query($sql1); $rows1 ...