20145309《Java程序设计》第八周学习总结
日志
•java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logger类,Logger类的构造函数标示为protected,不是java.util.logging同包的类不能直接以new创建,不许使用Logger的静态方法。
•Logger与Handler默认都会先依据Level过滤信息,如果没有做任何修改,取得的Logger实例之父Logger组态就是Logger.GLOBAL-LOGGER-NAME空间名称Logger实例的组态。
•在没有任何组态设定的情况下,默认取得的Logger实例,层级必须大于或等于Logger.GLOBAL-LOGGER-NAME名称空间logger实例设定的Level.INFO,才可能输出信息。
•在建立FileHandler指定模式字符串时,可以使用“%h”来表示用户的根目录,还可以使用“%t”取得系统暂存目录,或者使用“%g”自动为文档编号。
·Handler是负责输出,Formatter负责格式化,而信息过滤是交由Filter。
国际化基础
•ResourceBundle的静态getBundle()方法会取得一个ResourceBundle的实例,所给定的自变量名称是信息文档的主文件名,getBundle()会自动找到对应的.properties文档,取得ResourceBundle实例后,可以使用getString()指定键来取得。
Locale
•国际化的三个标准是地区(Locale)信息、资源包(Resource bundle)与基础名称(Base name)。
•地区信息的对应类是Locale,在建立Locale实例时,可以指定语言编码与地区编码。
Stream相关API
•Stream是JDK8中重要的新特性之一。Files上有几个静态方法,例如lines()、list()、walk()等方法,对于这类返回Stream实例的API,主要可适用于需要管线化、惰性操作的场合。
•如果想对数组进行管线化操作,方法之一市是使用Arrays的asList()方法返回List,而后调用stream()方法取得Stream实例,另一个方法是使用Arrays的stream()方法,它可以指定数组后返回Stream实例。
认识NIO
NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以让你设定缓冲区(Buffer)容量,在缓冲区中对感兴趣的数据区块进行标记,像是标记读取位置、数据有效位置,对于这些区块标记,提供了clear()、rewind()、flip()、compact()等高级操作。
使用Handler与Formatter
1.负责日志输出的是Handler实例。
MemoryHandler不会格式化日志信息,信息会暂存于内存缓冲区,直到超过缓冲区大小,才将信息输出至指定的目标Handler。
StreamHandler可自行指定信息输出时使用的OutputStream实例,它与子类都会使用指定Formatter格式化信息。
ConsoleHandler创建时,会自动指定OutputStream为System.err,所以日志信息会显示在控制台。
FileHandler创建时会建立日志输出时使用的FileOutputStream,文档位置与名称可以使用模式Pattern字符串指定。
SocketHandler创建时可以指定主机位置与端口,内部将自动建立网络联机,将日志信息传送至指定的主机。
2.Logger可以使用addHandler()新增Handler实例,使用removeHandler()移除Handler。
3.在创建FileHandler指定模式字符串:
使用“%h”来表示用户的根目录
使用“%t”取得系统暂存目录
使用“%g”自动为文档编号
使用“%h/config%g.log”表示将configN.log文件存储在用户根目录下,N表示每个信息的文档编号,会自动递增。
4.FileHandler默认的Formatter是XMLFormatter; ConsoleHandler默认使用SimpleFormatter;这两个类是Formatter的子类,可以通过Handler的setFormatter()方法设定Formatter。
5.如果要以特定编码输出信息或存储文档,Handler有个setEncoding()方法,可以指定文字编码。
自定义Handler、Formatter与Filter
1.如果java.util.logging包中提供的Handler成果都不符合需求,可以继承Handler类,操作抽象方法publish()、flush()、close()方法来自定义Handler。
2.在职责分配上,Handler是负责输出,格式化是交由Formatter,而信息过滤是交给Filter。Handler有默认的isLoggable()操作,会先依据Level过滤信息,再使用指定的Filter过滤信息。 format()方法会传入LogRecord,存储所有日志信息。
3.除了依据层级过滤之外,还可以加入额外过滤条件,,就可以操作Filter接口。
使用logging.properties
改变Logger对象的组态的方法:
(1)使用程序撰写方式
(2)通过logging.properties来设定Logger组态。
Stream相关API
1.对数组进行管线化操作的方法:
(1)使用Arrays的asList()方法返回List,而后调用stream()方法取得Stream实例
(2)使用Arrays的stream()方法,可以指定数组后返回Stream实例。
2.CharSequence上新增了chars()和codePoints()犯法,都是返回intStream,前者代表一串字符的整数值,后者代表一串字符的的码点。
3.Math在JDK8中也新增了不少数学运行相关API,例如,multiPlluExact()、floorMod()、floorDiv()等。