• 20155318 2016-2017-2 《Java程序设计》第八学习总结


    20155318 2016-2017-2 《Java程序设计》第八学习总结

    教材学习内容总结

    学习目标

    1. 了解NIO
    2. 会使用Channel、Buffer与NIO2
    3. 会使用日志API、国际化
    4. 会使用正则表达式
    5. 了解JDK8增强功能

    NIO与NIO2

    • NIO(New IO)-from JDK1.4
      • NIO用频道衔接数据节点,在处理数据是,设定缓冲区容量,提供clear()、rewind()、flip()、compact()等方法。
      • Channel: 衔接数据节点
      • Buffer: 块操作,直接子类都有一个allocate()静态方法,容量大小可以用capacity()取得。
    • NIO2 -from Java SE 7
      • java.nio.file
        • FileSystems
        • Paths
        • Files
      • java.nio.file.atribute
      • java.nio.file.spi
      • 用FileSystemProvider取得所需的操作对象,完成相应操作。

    通用API

    日志API
    1. java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logger类
    2. Logger类的构造函数标示为protected
    3. 不是java.util.logging同包的类不能直接以new创建,必许使用Logger的静态方法
    4. 无法使用构造方法生成Logger对象
    5. 通过getParent()取得父Logger实例,通过getLevel()取得设定的Level实例,默认取得的Logger实例,层级必须大于或等于Logger.GLOBAL-LOGGER-NAME名称空间logger实例设定的Level.INFO,才可能输出信息。Logger可通过setLevel()来设定Level实例创建:Logger logger = Logger.getLogger("cc.openhome.Main")取得:Logger logger = Logger.getLogger("Main.class.getName")
    Handler、Formatter与Filter
    1. Handler:输出介质,标准API提供了几个操作类:
    • MemoryHandler不会格式化日志信息,信息会暂存于内存缓冲区,直至超过大小才将信息输出至指定的目标Handler。
    • StreamHandler可自行指定信息输出时使用的OutputStream。
    • ConsoleHandler创建时,会自动指定OutputStream为System.err。
    • SocketHandler创建时可以指定主机位置与端口。
    • addHandler()新增Handler实例,removeHandler()移除Handler实例
    1. Formatter: 格式化
    2. Filter: 过滤
    国际化标准
    1. Localization 本地化;Internationalization(i18n)国际化
    2. ResourceBundle
    • 静态getBundle()方法取得一个ResourceBundle的实例,所给定的自变量名称是信息文档的主文件名,getBundle()会自动找到对应的.properties文档,用getString()指定键来取得
    1. Locale
    • 国际化的三个标准是地区(Locale)信息、资源包(Resource bundle)与基础名称(Base name)
    正则表达式
    1. 用于字符、字符串格式比较,包含字面意义字符与元字符。
      • 字面意义字符是指按照字面意义比较的字符
      • 元字符是不按照字面意义比较的字符,在不同情境有不同意义的字符。
    2. String的split()方法会返回切割后各个子字符串组成的String数组
    3. {n},贪婪量词,表示前面的量词出现n次,会尽可能找出长度最长的符合文字。
    4. 贪婪量词?逐步量词,找出长度最短的符合文字。
    5. 贪婪量词+,独吐量词,没有任何文字符合。
    6. 边界比较
    7. Pattern与Matcher
      • java.util.regex.Pattern实例是规则表示式在JVM中的代表对象,Pattern的构造函数被标示为private,必须通过Pattern的静态方法compile()来取得。
      • 用matcher()方法指定要比较的字符串,这会返回java.util.regex.Matcher实例,表示对指定字符串的比较。
    JDK8 API增强功能
    1. String新增join()静态方法可以指定每个字符串间以逗号分隔进行连接。
    2. Arrays上新增parallelPrefix()、parallelSetAll()与parallelSort()方法.
    3. 对数组进行管线化操作:
      • 方法一是使用Arrays的asList()方法返回List,而后调用stream()方法取得Stream实例;
      • 另一个方法是使用Arrays的stream()方法,可以指定数组后返回Stream实例。
    4. CharSequence上新增了chars()和codePoints()方法,都是返回intStream。
    5. Math在JDK8中也新增了不少数学运行相关API。

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

    本周教材问题均为教学指导中的问题:

    • 问题1:Logger/Level/Handler的关系

    • 解决方案:Java日志缓存机制这篇博客对这个问题做了很好的解释,总结如下:

    • Logger:日志结构的基本单元。Logger 是以树形结构存储在内存中的,根节点为 root.com.test(如果存在)一定是 com.test.demo(如果存在)的父节点,即前缀匹配的已存在的 logger 一定是这个 logger 的父节点。这种父子关系的定义,可以为用户提供更为自由的控制粒度。因为子节点中如果没有定义处理规则,如级别 handler、formatter 等,那么默认就会使用父节点中的这些处理规则。

    • Level:JDK 中定义了 Off、Severe、Warning、Info、Config、Fine、Finer、Finest、All 九个日志级别,定义 Off 为日志最高等级,All 为最低等级。每条日志必须对应一个级别。级别的定义主要用来对日志的严重程度进行分类,同时可以用于控制日志是否输出。

    • Handler:用来处理 LogRecord,默认 Handler 是可以连接成一个链状,依次对 LogRecord 进行处理。

    • 问题2:理解贪婪模式,非贪婪模式,独占模式

    • 解决方案:

      • 贪婪匹配:正则表达式一般趋向于最大长度匹配。
      • 非贪婪匹配:尽可能就少的匹配字符。
      • 独占模式:同贪婪一样匹配最长正则表达式尽可能长地去匹配字符串,一旦匹配不成功就会结束匹配。
    1. 编程中如何区分两种模式
      • 默认是贪婪模式;在量词后面直接加上一个问号就是非贪婪模式。

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

    本周代码调试问题均为教学指导中的问题:

    • 问题1:p475 HandlerDemo.java: %h 从哪来的?还有什么其他模式字符串?
    • 解决方案:是程序配置操作记录文件,(可是我没找到自己电脑上的)%h表示代码根目录,%t代表系统暂存目录,%g自动为文档编号
    • 问题2:SplitDemo.java修改代码,字符串改成csv,怎么分隔?
    • 解决方案:修改代码段如下:
    for (String token:"csv".split("")){
       System.out.println(token);
    }    
    
    • 运行结果如下:

    • c语言实现思路:

    s[]={我们输入的字符串};
    l=strlen(s);
    for(i=0;i<l;i++){
        if(s[i]="分割条件")
            printf("
    ");
        else
            printf("%s",s[i]);
    }
    
    • 问题3:p491 PatternMatcherDemo.java中out.printf("%s find ", pattern.pattern())的作用?
    • 解决方案:用find将前后分开

    代码托管

    代码行数统计

    上周考试错题总结

    • 错题1:下面哪些Linux 命令可以ASCII码和16进制单字节方法输出Hello.java的内容?
    • A .od -b -tx1 Hello.java
    • B .od -tcx1 Hello.java
    • C .od -tc -tx1 Hello.java
    • D .od -tbx1 Hello.java
    • 正确答案: B C
    • 解析:-b 是以八进制输出
    • 错题2:JDK8中的Lambda表达式有以下好处:
    • A .消除重复性
    • B .提高性能
    • C .提高安全性
    • D .改善可读性
    • 正确答案: A D
    • 分析:我没注意是多选题,少选了A选项
    • 错题3:JDK8 中新时间API中,用于度量时间的类有()
    • A .Instant
    • B .Duration
    • C .Period
    • D .LocalDateTime
    • 正确答案: B C
    • 错题4:A ________________ diagram helps us visualize the contents of and relationships among the classes of a program(___有助于我们查看程序中类的内容和它们之间的关系).
    • A .class and object(类和对象)
    • B .UML(UML类图)
    • C .object-oriented(面向对象)
    • D .public
    • E .private
    • 正确答案: B
    • 错题5:__________________ parameters are the values that are used when calling a method(___参数是调用方法时传给方法的值).
    • A .formal(形式参数)
    • B .actual(实际参数)
    • C .useful(有用的参数)
    • D .informal(非正式参数)
    • E .none of the above(以上都不是)
    • 正确答案: B
    • 错题6:An object can be thought of as a blueprint for a set of classes(对象被认为是类集合的蓝图).
    • A .true
    • B .false
    • 解析:类可以被看作是一组对象的蓝图,而不是另一种方式。
    • 错题7:Which of the following objects could contain the information “eastern standard time”?(下面哪些类的对象会包含“东部标准时间”的信息)
    • (Choose all that apply.)
    • A .Instant
    • B .LocalDate
    • C .LocalDateTime
    • D .LocalTime
    • E .ZonedDateTime
    • 正确答案: E
    • 错题8:What is the output of the following code?(下面代码的运行结果是?)
    LocalDate date = LocalDate.of(2018, Month.APRIL, 30);
    date.plusDays(2);
    date.plusYears(3);
    System.out.println(date.getYear() + " "+
     date.getMonth() + " "+ date.getDayOfMonth());
    
    • A .2018 APRIL 2
    • B .2018 APRIL 30
    • C .2018 MAY 2
    • D .2021 APRIL 2
    • E .2021 APRIL 30
    • F .2021 MAY 2
    • G .A runtime exception is thrown.
    • 正确答案: B
    • 解析:日期开始为2018年4月30日。因为日期是不可变的,加上方法忽略返回值,结果不变。因此,选项B是正确的。
    • 错题8:What is the output of the following code?(下面代码的运行结果是?)
    LocalDate date = LocalDate.of(2018, Month.APRIL, 40);
    System.out.println(date.getYear() + " " + date.getMonth()
    + " "+ date.getDayOfMonth());
    
    • A .2018 APRIL 4
    • B .2018 APRIL 30
    • C .2018 MAY 10
    • D .Another date
    • E .The code does not compile.
    • F .A runtime exception is thrown.
    • 正确答案:F
    • 解析:如果无效的日期值通过,则引发异常。没有第四十天四月或任何其他月份

    结对及互评

    点评过的同学博客和代码

    • 本周结对学习情况
      • 20145226

      • 结对照片

      • 结对学习内容

        • 学习partner的代码并作出点评
        • 学习partner的博客和自己的博客做对比,找出不足
    • 上周博客互评情况

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

    因为周末有其他事情,这周Java的学习时间提前了很多,不拖到周末学习反而感到心里轻松很多,果然周末就是不适合学习!但是发现很多前面的知识都还没完全掌握,这将是未来学习需要努力的地方。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 50/100 1/1 24/24 安装学习Java的一系列软件
    第二周 250/300 1/2 30/54 了解Java的基本语法
    第三周 552/852 1/3 16/60 了解Java是面向对象的语言
    第四周 717/1569 1/4 10/70 了解Java继承与接口
    第五周 495/2064 1/5 6/76 了解异常处理,学会使用Collection收集对象
    第六周 754/2818 1/6 6/82 了解串流和线程
    第七周 679/3493 2/8 5/87 了解时间与日期,掌握Date和Calendar的一些用法
    第八周 352/3845 1/9 8/95 了解并会使用通用API
    • 计划学习时间:6小时

    • 实际学习时间:8小时

    参考资料

  • 相关阅读:
    CloudStack tomcat集成方式分析
    cloudstack-setup-databases cs数据安装
    CloudStack 安装时需要的第三方包
    制作initramfs/initrd镜像
    GRUB使用说明
    Linux的kickstart安装详解
    cs4.1 编译与安装
    CS4.1 RPM打包函数分析
    Markdown 打出上下标
    matlab命令行双箭头消失
  • 原文地址:https://www.cnblogs.com/lxy1997/p/6710931.html
Copyright © 2020-2023  润新知