20145303 《Java程序设计》第8周学习总结

教材学习内容总结

第十四章 NIO和NIO2

1.NIO的定义
InputStream、OutputStream的输入输出,基本上是以字节为单位进行低层次处理,虽然需要直接面对数组,但实际上多半是对字节数组中整个区块进行处理。dump()方法是整块数据读入后又整块数据写出。

2.NIO2的定义
现今世界上存在着各式各样的文件系统,不同的文件系统会提供不同的存取方式,文件属性,权限控制等操作。在JDK7出现以前,常需要对特定的文件撰写特定的程序,不仅撰写方式没有标准,针对特定功能撰写的程序也会增加应用程序开发者的负担。
NIO2文件系统API提供一组标准类接口与类,应用程序开发者只要基于这些标准接口与类进行文件系统操作,底层实际如何进行文件系统的操作,是由文件系统提供者负责。

第十五章 通用API

15.1 日志

日志API简介

  • java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可在标准Java平台使用是其好处。使用日志的起点是Logger类,Logger类的构造函数标示为protected,不是java.util.logging同包的类不能直接以new创建,要取得Logger实例,必修使用Logger的静态方法getLogger()。

  • 调用getLogger()时,必须指定Logger实例所属名称空间,名称空间以“.”作为层级区分,名称空间层级相同的Logger,其父Logger组态相同。通常在哪个类中取得的Logger,名称空间就会命名为哪个类全名。

  • 简单来说,Logger是记录信息的起点,要输出的信息,必须先通过Logger的Lever与Filter过滤,在通过Handler的Lever与Filter过滤,格式化信息的动作交给Formatter,输出信息的动作实际上是Handler负责。

  • Logger有层级关系,名称空间层级相同的Logger,父Logger组态会相同,每个Logger处理完自己的日志动作后,会向父Logger传播,让父Logger也可以处理日志。

指定日志层级

  • 取得的Logger实例之父Logger组态,就是Logger.GLOBAL_LOGGER_NAME名称空间Logger实例,可通过getParent()取得设定的Logger实例,可通过getLevel()取得设定的Level实例。

  • Logger的信息处理会往父Logger传播,在没有做任何组态设定的情况下,默认取得的Logger实例,层级必须大于或等于Logger.GLOBAL_LOGGER_NAME名称空间Logger实例设定的Lever.INFO,才有可能输出信息。

  • 可以通过setLevel()设定Level实例,若log()时指定的Lever实例内含的int值小于Logger设定的Level实例内含的int值,Level就不会记录信息。

  • 在经过Logger过滤之后,还得再经过Handler的过滤,一个Logger可以拥有多个Handler,可通过Logger的addHandler()新增Handler实例。实际上进行信息输出时,目前Logger的Handler处理完,还会传播给父Logger的所有Handler处理,可通过getHandlers()方法取得目前已有的Handler实例数组。

使用Handler与Formatter

  • 负责日志输出的是Handler实例。标准API中提供几个Handler操作类:
    MemoryHandler不会格式化日志信息,信息会暂存于内存缓冲区,直到超过缓冲区大小,才将信息输出至指定的目标Handler。
    StreamHandler可自行指定信息输出时使用的OutputStream实例,它与子类都会使用指定Formatter格式化信息。
    ConsoleHandler创建时,会自动指定OutputStream为System.err,所以日志信息会显示在控制台。
    FileHandler创建时会建立日志输出时使用的FileOutputStream,文档位置与名称可以使用模式Pattern字符串指定。
    SocketHandler创建时可以指定主机位置与端口,内部将自动建立网络联机,将日志信息传送至指定的主机。

  • Logger可以使用addHandler()新增Handler实例,使用removeHandler()移除Handler。

  • FileHandler默认的Formatter是XMLFormatter;
    ConsoleHandler默认使用SimpleFormatter;这两个类是Formatter的子类,可以通过Handler的setFormatter()方法设定Formatter。

自定义Handler、Formatter与Filter

handler是负责输出,Formatter负责格式化,而信息过滤是由Filter。
自定义Formatter,可以继承Formatter后操作抽象方法format(),这个方法会传入logRecord,储存所有日志信息。

使用logging.properties

可以通过logging.properties改变Logger组态。

15.2 国际化基础

使用ResourceBundle

ResourceBundle的静态getBundle()方法会取得一个ResourceBundle的实例,所给定的自变量名称是信息文档的主文件名,getBundle()会自动找到对应的.properties文档,取得ResourceBundle实例后,可以使用getString()指定键来取得。

使用Locale

国际化的三个标准是地区(Locale)信息、资源包(Resource bundle)与基础名称(Base name)。
地区信息的对应类是Locale,在建立Locale实例时,可以指定语言编码与地区编码。

15.3 规则表达式

  • 字面意义字符是指按照字面意义比较的字符。
    元字符时不按照字面比较,在不同情境有不同意义的字符。

  • java.util.regex.Pattern实例是规则表达式在JVM中的代表对象,Pattern的构造函数被标示为private,通过Pattern的静态方法compile()来取得。Pattern.compole()方法的另一版本,可以指定旗标(Flag)。

  • 在取得Pattern实例后,可使用方法:
    split()方法:将指定字符串依规则表达式切割
    matcher()方法:指定要比较的字符串
    find()方法:看看是不是有下一个符合字符串
    lookingAt():看看字符串开头是否符合规则表达式
    group():可以返回符合的字符串。

  • 在取得Matcher实例后,可使用方法:
    replaceAll()可以将符合规则表达式的部分以指定的字符串取代
    replaceFirst()取代首个组合规则表达式的部分
    replaceEnd()取代最后符合规则表达式的部分
    start()方法可以取得符合字符串的初始索引
    end()方法可以取得符合字符串最后一个字符后的索引

15.4 JDK8 API增强功能

1.StringJoiner、Arrays新增API

  • 在JDK8中,String新增了join()静态方法可以直接指定每个字符串间以逗号分隔进行连接。

  • JDK8中,针对大型数组的平行化操作,在Arrays上新增了parallelPrefix()、parallelSetAll()与parallelSort()方法,

  • parallelSort()方法。

  • parallelPrefix()方法,可以指定×××BinaryOperator实例。

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

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

2.Stream相关API

  • Stream是JDK8中重要的新特性之一。Files上有几个静态方法,例如lines()、list()、walk()等方法,对于这类返回Stream实例的API,主要可适用于需要管线化、惰性操作的场合。

  • 如果想对数组进行管线化操作,方法之一市是使用Arrays的asList()方法返回List,而后调用stream()方法取得Stream实例,另一个方法是使用Arrays的stream()方法,它可以指定数组后返回Stream实例。

本周代码托管截图

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

这周的学习比又上周复杂了一些,这周中讲了很实用的通用API,并且了解了java中日志的一些功能。这周进行了第三次试验,主要是掌握git的使用方法。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3500行 15篇 400小时
第八周 300/1900 1/14 30/205

20145303 《Java程序设计》第8周学习总结的更多相关文章

  1. 学号20145303 《Java程序设计》第一周学习总结

    学号20145303 <Java程序设计>第一周学习总结 教材学习内容总结 *dos命令行: dir:列出当前目录下的文件及文件名 md:创建目录 rd:删除目录.为空时文件夹(文件夹为空 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

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

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

随机推荐

  1. 【POJ1275】Cashier Employment 差分约束

    [POJ1275]Cashier Employment 题意: 超市经历已经提供一天里每一小时需要出纳员的最少数量————R(0),R(1),...,R(23).R(0)表示从午夜到凌晨1:00所需要 ...

  2. angular 2+ innerHTML属性中内联样式丢失

    通过属性绑定的innerHTML,把字符串里面的html解析 解析是没问题的,但一些内联样式会丢失掉 为了不丢掉样式,需要自定义一个管道来解决这个问题 html.pipe.ts import {Pip ...

  3. jQuery返回顶部实用插件YesTop

    只需一句jQuery代码实现返回顶部效果体验:http://hovertree.com/texiao/yestop/ 使用方法:只需引用jQuery库和YesTop插件(jquery.yestop.j ...

  4. CentOS中制作本地yum源

    1.光盘指向镜像 2.将镜像挂载到某个目录 mkdir /mnt/cdrom mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom 3.修改本机上的YUM源配置文件 ...

  5. Open 常用开源

    msdn:https://msdn.microsoft.com/zh-cn codeplex:https://www.codeplex.com/ gotdotnet:http://www.gotdot ...

  6. mybatis调用oracle存储过程例子.

    1.MYBATIS方法: <select id="getFlowNum" statementType="CALLABLE"> <![CDATA ...

  7. Yii框架2.0的模块

    模块是个独立的软件单元,也是又控制器,视图,模型组成的,也可以有自己的布局.但他必须属于某个应用下,不能独立存在. 其中模块的控制器,视图和应用的控制器和视图使用基本相同,不作赘述,下面说说模块的使用 ...

  8. oracle脚本执行多条语句报错

    情况一: create table edu_group_parent ( group_id ) primary key not null, group_name ), group_url ), gro ...

  9. Number Sequence---hdu1711(kmp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 题意就是求b数组在a数组出现的位置:就是kmp模板: #include<stdio.h&g ...

  10. MySQL优化(一):MySQL分库分表

    一.分库分表种类 1.垂直拆分 在考虑数据拆分的时候,一般情况下,应该先考虑垂直拆分.垂直可以理解为分出来的库表结构是互相独立各不相同的. - 如果有多个业务,每个业务直接关联性不大,那么就可以把每个 ...