zoukankan      html  css  js  c++  java
  • 20145303 《Java程序设计》第8周学习总结

    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
  • 相关阅读:
    二进制安装postgresql
    php mongodb扩展安装
    coinbase交易冻结时间
    linux服务器及工具常用命令
    PM2下使用 执行npm命令
    phpstorm安装PHP_CodeSniffer
    TP5 save遍历更新,过滤相邻重复字段,问题汇总
    mysqlbinlog 数据恢复
    设计模式之状态机模式
    关于c++中sleep_for函数的总结分析
  • 原文地址:https://www.cnblogs.com/ljq007/p/5427989.html
Copyright © 2011-2022 走看看