zoukankan      html  css  js  c++  java
  • 20155339 2016-2017-2 《Java程序设计》第7周学习总结

    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:ookjava exists. Which of the following lines of code creates an object that represents the file? (Choose all that apply.)

    A .
    new File("c:ookjava");

    B .
    new File("c:ookjava");

    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小时

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

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

    参考资料

  • 相关阅读:
    并不对劲的bzoj3932: [CQOI2015]任务查询系统
    并不对劲的bzoj4868: [Shoi2017]期末考试
    并不对劲的bzoj1853:[SCOI2010]幸运数字
    并不对劲的bzoj4199: [Noi2015]品酒大会
    并不对劲的bzoj1500: [NOI2005]维修数列
    并不对劲的hdu4777
    并不对劲的线段树套平衡树
    44.Linked List Cycle II(环的入口节点)
    43.Word Break(看字符串是否由词典中的单词组成)
    42.Flatten Binary Tree to Linked List
  • 原文地址:https://www.cnblogs.com/pingcpingcuo/p/6683134.html
Copyright © 2011-2022 走看看