您的位置:首页 > 移动开发

JDK源码阅读第一天——java.lang.Appendable

2018-01-22 15:42 513 查看
今天开始对jdk源码进行一次阅读,不知道自己能不能坚持到把所有常用的类,接口的源码看一遍。希望自己能够坚持下去。

jdk版本是1.8的,结合了jdk1.8的API进行阅读,先从常用的包 java.lang开始阅读。在java.lang包中一共有9个接口、37个类,等等。只看接口与类其他的不涉及到不看。

接口

接口
Appendable
概述

所有已知实现的子类

从以下版本开始

源代码解析

总结

Appendable

1. 概述

public interface Appendable

能够被添加 char 序列和值的对象。如果某个类的实例打算接收取自 Formatter 的格式化输出,那么该类必须实现 Appendable 接口。

要添加的字符应该是有效的 Unicode 字符,正如 Unicode Character Representation 中描述的那样。注意,增补字符可能由多个 16 位 char 值组成。

Appendable 对于多线程访问而言没必要是安全的。线程安全由扩展和实现此接口的类负责。

由于此接口可能由具有不同的错误处理风格的现有类实现,所以无法保证错误不会传播给调用者。

2. 所有已知实现的子类

BufferedWriter, CharArrayWriter, CharBuffer, FileWriter, FilterWriter,  LogStream, OutputStreamWriter, PipedWriter, PrintStream, PrintWriter, StringBuffer, StringBuilder, StringWriter, Writer


3. 从以下版本开始

1.5


4. 源代码解析:

public interface Appendable{
/**
* 向此Appendable添加指定的字符序列。
* 有时可能不会全部添加真个序列,这取决于使用哪个类来实现字符序列 csq。
* 例如:如果csq是java.nio.CharBuffer的实例,则通过缓冲区的位置和限制来定义要添加的子序列。
* @param  csq
* 要添加的字符串序列。如果 csq 为 null,则向该 Appendable 添加四个字符 "null"。
* @return  此Appendable的引用
* @throws  IOException
*          如果发生I/O错误
*/
Appendable append(CharSequence csq) throws IOException;
/**
* 向此Appendable添加指定的字符序列的子序列。
* 当csq不为null的时候,调用 out.append(csq, start, end) 方法
* 和调用 out.append(csq.subSequence(start, end))方法完全相同
*
* @param  csq
* 子序列将被添加的字符序列。如果 csq 为 null,则添加四个字符 "null",就好像 csq 包含这些字符一样。
* @param  start
* 子序列中第一个字符索引
* @param  end
* 在子序列中最后一个字符后面的字符的索引。
* @return 此Appendable的引用
* @throws  IndexOutOfBoundsException
* 如果 start 或 end 为负,以及 start 大于 end 或者 end 大于 csq.length()
* @throws  IOException
*        如果发生I/O错误
*/
Appendable append(CharSequence csq, int start, int end) throws IOException;
//向此 Appendable 添加指定字符。
Appendable append(char c) throws IOException;

}


5. 总结

如果某个类的实例打算接收取自 java.util.Formatter 的格式化输出,那么该类必须实现 Appendable 接口。

用法:

// StringBuffer 实现了 Appendable
StringBuffer stringBuffer = new StringBuffer();
CharSequence charSequence=null;
stringBuffer.append(charSequence);
Formatter formatter = new Formatter(stringBuffer, Locale.CHINESE);
System.out.println("Formatter:"+formatter);


输出结果:
Formatter:null


输出结果验证了,如果 csq 为 null,则添加四个字符 “null”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java Appendable