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

教材学习内容总结

第十四章NIO与NIO2

  • NIO使用频道来衔接数据节点,在处理数据时,NIO可以让你设定缓冲区容量,在缓冲区中对感兴趣的数据区块进行标记。对于区块标记,提供了clear()、rewind()、flip()、compact()等高级操作。
  • Buffer的直接子类们都有一个allocate()静态方法,可以让你指定Buffer容量,Buffer容量大小可使用capacity()方法取得,实际可读取或写入的数据界限索引值可以由limit()方法得知或设定,下一个可读取数据的位置索引值,可以使用position()方法得知或设定。
  • NIO2文件系统API提供一组标准接口与类,应用程序开发者只要基于这些标准接口与类进行文件系统操作,底层事迹如何进行文件系统操作,是由文件系统提供者负责。

第十五章 通用API

日志API简介

  • java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logger类,Logger类的构造函数标示为protected,不是java.util.logging同包的类不能直接以new创建,必许使用Logger的静态方法,如:Logger logger = Logger.getLogger("cc.openhome.Main")
  • 要取得Logger实例,必须使用Logger的静态方法getLogger()

Logger logger = Logger.getLogger("cc.Main")

  • 名称空间层级相同的Logger,父Logger组态会相同,每个Logger处理完自己的日志动作后,会向父Logger传播,让父Logger也可以处理日志。
  • 相关练习LoggerDemo.java运行结果如下

指定日志层级

  • 在没有任何组态设定的情况下,默认取得的Logger实例,层级必须大于或等于Logger.GLOBAL-LOGGER-NAME名称空间logger实例设定的Level.INFO,才可能输出信息。
  • Handler可通过setLevel()设定信息, 以下显示的信息不仅要将Logger的层级设定为Level.INFO,也要讲Handler的层级设定为Level.INFO。
  • 相关练习LoggerDemo2.java运行结果如下。

Handler、Formatter与Filter

  • 负责日志输出的是Handler实例,标准API中提供了几个Handler操作类,继承架构如下
graph LR
MemoryHandler-->Handler
StreamHandler-->Handler
ConsoleHandler-->StreamHandler
FileHandler-->StreamHandler
SockHandler-->StreamHandler
  • MemoryHandler不会格式化日志信息,信息会暂存于内存缓冲区,直至超过大小才将信息输出至指定的目标Handler。
  • 在建立FileHandler指定模式字符串时,可以使用“%h”来表示用户的根目录,还可以使用“%t”取得系统暂存目录,或者使用“%g”自动为文档编号。
  • 如果不想让父Longer的Handler处理日志,可以调用Loger实例的setUseParentHandlers()设定为false,这样日志就不会传播给父Logger。也可以使用Logger实例的setParent()方法指定父Logger。
  • 如果java.util.logging包中提供的Handler成果都不符合需求,可以继承Handler类,操作抽像方法publich()、flush()与close()方法来自自定义Handler,减一操作时考虑信息过滤与格式化。
  • 自定义Formatter,可以继承Formatter后操作抽象方法format(),这个方法会传入logRecord,储存所有日志信息。

使用logging.properties

  • 可以通过logging.properties来设定Logger组态。

国际化基础

  • 应用程序时,在不修改应用程序情况下,根据不同用户直接采用不同语言、日期格式等,这样的设计考虑称为国际化,简称i18n。

使用ResourceBundle

  • 对于日后可能变动的文字信息,可以考虑将信息移至程序之外,使用ResourceBundle来做信息绑定。方法是首先准备一个.propertise文档,.properties文档必须放置在CLASSPATH的路径设定下,文档中撰写的是键/值配对,之后在程序中可以使用键来取得配对。
  • ResourceBundle的静态getBundle()方法会取得一个ResourceBundle的实例,所给定的自变量名称是信息文档的主文件名,getBundle()会自动找到对应的.properties文档,取得ResourceBundle实例后,可以使用getString()指定键来取得文档中对应的值。

使用Locale

  • 国际化的三个标准是地区(Locale)信息、资源包(Resource bundle)与基础名称(Base name)。地区信息的对应类是Locale,如Locale locale=new Locale("zh","TW");,ResourceBundle对象时JVM资源包的代表对象。代表同一组信息但不同地区的各个资源包会共享相同的基础名称,使用ResourceBundle的getBundle()时指定的名称,就是在指定基础名称。

规则表示式

规则表示式简介

  • 如果你有一个字符串,可以使用String的split()方法,他会返回切割后各个子字符串组成的String数组。运行SplitDemo.java的结果如下

  • 规则表示式基本上包括两种字符:字面意义字符与元字符。字面意义字符是指按照字面意义比较的字符,元字符是不按照字面意义比较,在不同情境有不同意义的字符。

1.字面意义字符

  • 字母和数字在规则表示式中都是按照字面意义比较的,有些字符之前加上\之后会被当做元字符。
  • 元字符在规则表示式中有特殊意义,如!$ ^ * ( ) + = { } [ ] | \ : . ?等。若要比较这些字符,则必须加上忽略符号\。如果不确定哪些标点要加互殴额符号,就在所有标点前加上\。

2.字符类

  • 规则表达式中,多个字符可以分归在一起,成为一个字符类,字符类会比较文字中是否有“任一个”字符符合字符类中某个字符。
  • 归类字符的方式之一是将字符放于[]中。预定义字符类,不用被包括在[]之中。
  • 字符类中可以使用作为字符类元字符,[]则为反字符类。“a、b、c以外的字符”表示为[^abc]。

3.贪婪、逐步、独吐量词

  • {n}是贪婪量词表示法的一种,表示前面的项目出现n次。
  • 在贪婪量词表示法后加上?,将会成为逐步量词,又常称为懒惰量词,或非贪婪量词。
  • 在贪婪量词表示法后加上+,将会成为独吐量词。

4.边界比较

  • 边界比较用来表示文字必须符合指定的边界条件,也就是定位点,因此这类表示式也锚点。
  • SplitDemo2.java与SplitDemo3.java运行结果如下。

分组与参考

  • 可以使用()来将规则表示式分组,除了作为子规则表达式之外,还可以搭配量词使用。
  • 分组回头参考是,是在\后加上分组计数,表示参考第几个分组的比较结果。

Pattern与Matcher

  • 在程序中使用表示式,必须先针对规则表示式做剖析、验证等动作,确定规则表示式语法无误,对字符串进行比较。
  • java.util.regex.Pattern实例是规则表示式在JVM中的代表对象,Pattern的构造函数被标示为private,必须通过Pattern的静态方法compile()来取得。
  • 规则表达式本身可读性差、除错不易,可以使用getDescription()取得错误说明,使用getIndex()取得错误索引,使用getPattern()取得错误的规则表达式,getMessage()会以多行显示错误的索引、描述等综合信息。
  • 在取得Pattern的实例后,可以使用split()方法将指定字符串依规则表示式切割,效果等同于String的split()方法,可以使用matcher()方法指定要比较的字符串,可以使用find()方法看看是不是有下一个符合字符串,或是使用lookingAt()看看字符串开头是否符合规则表达式,使用group()方法则可以返回符合的字符串。
  • replaceAll()方法,可以将符合规则表示式的部分以指定的字符串取代。

StringJoiner、Arrays新增API

  • String新增join()静态方法可以指定每个字符串间以逗号分隔进行连接。
  • Arrays上新增parallelPrefix()、parallelSetAll()与parallelSort()方法,可以将指定的数组分为子数组并以平行化方式分别排序,然后再进行合并排序。

    ·parallelPrefix()方法,可以指定xxxBinaryOperator实例,执行类似Stream的reduce()过程。

    ·parallelSetAll()方法,用来对数组进行初始化或全面重设每个索引元素。

    ·parallelSort()方法,可以将指定的数组分为子数组并以平行化方式分别排序,然后再进行合并排序。

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

  • 问题1:在学习正则表达式时对于p484的表15.1的学习时,对于\0n与\0nn的区别?
  • 问题1解决方案:上网搜索没有找到答案,自己进行猜想并且实践,发现是指类似\03与\033这样的区别。
  • 问题2:同样在学习表15.1时,对于\0mnn中m<=3的原因?
  • 问题2解决方案:待解决。
  • 问题3:对于正则表达式的一些理解。
  • 问题2解决方案:在解决上述问题的过程当中,学习了一篇博客,想在这里分析给大家,链接
  • 问题3:日志能不能存数据库中?
  • 问题3解决方案:上网进行搜索,得到答案log4j支持将日志信息插入数据库,配置一下就可以。

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

  • 问题1:p491 PatternMatcherDemo.java中

    out.printf("%s find ", pattern.pattern())的作用?
  • 问题1解决方法:通过删掉改行得到以下两种结果

因此我觉得应该是为了区分三个字符串的不同结果,便于用户看出。

代码托管

上周考试错题总结

  • vi中哪条命令是不保存强制退出?
  • 答案:q!此外:wq 是保存退出。 !表示强制。
  • JDK8中的Lambda表达式有以下好处:

    A .

    消除重复性

    B .

    提高性能

    C .

    提高安全性

    D .

    改善可读性
  • 答案:A、D,对12章的内容,没有足够的了解。
  • When applied to instance variables, the ________________ visibility modifier enforces encapsulation(当应用到实例变量时,____可见性修饰符强制执行封装).

    A .

    static

    B .

    final

    C .

    public

    D .

    private

    E .

    none of the above(以上都不是)
  • 答案:D,专用的可见性修饰符防止不当的数据访问,因此促进封装。选择a和b不是可见性修饰符,而选择c是允许公众访问对象数据的可见性修饰符,这违反了封装的原则。
  • Which of the following method headers is most likely a header for a mutator method?(以下哪个方法头部最有可能是设值方法的头部?)

    A .

    public int getAge()

    B .

    public double computeSalary()

    C .

    public Person()

    D .

    public void setAge(int newAge)

    E .

    none of these are headers for a mutator method(以上均不是设值方法的头部)
  • 答案:D,调整器是更改实例变量的值的方法,通常被称为setter。因此,选择d是正确的答案。选择a是访问者方法的标题的示例,通常称为“getter”。"选择c是构造函数,选择b是类方法."。
  • A method that has multiple definitions is an __________________ method(具有多重定义的方法称为方法___).

    A .

    overloaded(重载)

    B .

    overridden(重写)

    C .

    overlooked(忽略)

    D .

    overclocked(超频)

    E .

    none of the above(以上均不是)
  • 答案:A,具有多个定义的方法是重载方法。重载方法的版本根据其参数的数量、类型和顺序来区分。重写的方法是在继承层次结构中后期重新定义的方法。稍后将更详细地研究它们。选择c和d不是Java中的方法类型。
  • When an object is passed to a method, the actual and formal parameters become aliases(当把对象传递给方法时,实参和形参互为别名).

    A .

    true

    B .

    false
  • 答案:A,实际参数是发送到该方法的基准。方法定义中使用了正式参数。当对象发送到一个方法时,这两个值都是引用,它们成为彼此的别名。

结对及互评

评分标准

  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

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况

    • 20155306
    • 结对照片
    • 结对学习内容

      对14章进行了简单的学习,深入学习了15章,同时对错题以及之前的内容进行了复习。
  • 上周博客互评情况

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

这周改进了学习方法,但似乎还是没有找到最适合自己的,有时候感觉自己还是做了很多无用功,在接下来的几周学习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
第八周 421/4633 1/10 15 / 156

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

耗时估计的公式

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

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

  • 计划学习时间:18小时

  • 实际学习时间:15小时

  • 改进情况:这周按照老师的建议改进了一次学习方法,学习效率貌似略有提高。

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

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

参考资料

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

  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. Vue 路由详解

    Vue 路由详解 对于前端来说,其实浏览器配合超级连接就很好的实现了路由功能.但是对于单页面应用来说,浏览器和超级连接的跳转方式已经不能适用,所以各大框架纷纷给出了单页面应用的解决路由跳转的方案. V ...

  2. PAT甲题题解-1063. Set Similarity (25)-set的使用

    题意:两个整数集合,它们的相似度定义为:nc/nt*100%nc为两个集合都有的整数nt为两个集合一共有的整数注意这里的整数都是各不相同的,即重复的不考虑在内.给出n个整数集合,和k个询问,让你输出每 ...

  3. Linux第六周学习总结——进程额管理和进程的创建

    Linux第六周学习总结--进程额管理和进程的创建 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/cour ...

  4. VS系列软件中debug和release编译环境有什么区别

    当编译和执行一个工程时,可以在Debug和Release两种配置下执行. Debug模式用于调试程序,这是个受保护的运行环境,它将告诉你程序是否有泄露,在运行时也能对特定函数的结果进行检查.然而它生成 ...

  5. Alpha 冲刺报告模板

    Alpha 冲刺报告模板 Deadline: 十分钟左右站立会议,控制好时间,不要在此会议上讨论细节问题. 每组一份博客,组内共享,每人都需提交. 模板 队名:xxx 组员1(组长) 今天完成了哪些任 ...

  6. Docker(一)-Docker介绍

    什么就Docker? Docker是一个开源项目, 诞生于2013年初,最初是dotCloud公司内部的一个业余项目.它基于Google公司推出的Go语言实现.项目后来加入了Linux基金会,遵从了A ...

  7. 随web应用启动而自启动的后台线程

    当前遇到一个需求: 需要在web应用启动的时候就启动一个线程定时的来做某项工作. 有两种解决方法: 1.增加一个监听器Listener来实现相关功能. 2.增加一个随项目启动的servlet来实现相关 ...

  8. download & excel & blob

    download & excel & blob Blob https://developer.mozilla.org/en-US/docs/Web/API/Blob FileReade ...

  9. XShell中文乱码问题解决

    现象:XShell终端中输入中文显示乱码 原因:XShell终端的编码格式与服务器不同 解决:修改XShell终端的编码格式:菜单中点击,文件->属性->终端->编码,选择“UTF- ...

  10. Vue---从后台获取数据vue-resource的使用方法

    作为前端人员,在开发过程中,我们大多数情况都需要从后台请求数据,那么在vue中怎样从后台获取数据呢?接下来,我简单介绍一下vue-resource的使用方法,希望对大家有帮助. 一.下载vue-res ...