JDK源码阅读第一天——java.lang.Appendable
2018-01-22 15:42
513 查看
今天开始对jdk源码进行一次阅读,不知道自己能不能坚持到把所有常用的类,接口的源码看一遍。希望自己能够坚持下去。
jdk版本是1.8的,结合了jdk1.8的API进行阅读,先从常用的包 java.lang开始阅读。在java.lang包中一共有9个接口、37个类,等等。只看接口与类其他的不涉及到不看。
Appendable
概述
所有已知实现的子类
从以下版本开始
源代码解析
总结
能够被添加 char 序列和值的对象。如果某个类的实例打算接收取自 Formatter 的格式化输出,那么该类必须实现 Appendable 接口。
要添加的字符应该是有效的 Unicode 字符,正如 Unicode Character Representation 中描述的那样。注意,增补字符可能由多个 16 位 char 值组成。
Appendable 对于多线程访问而言没必要是安全的。线程安全由扩展和实现此接口的类负责。
由于此接口可能由具有不同的错误处理风格的现有类实现,所以无法保证错误不会传播给调用者。
用法:
输出结果:
输出结果验证了,如果 csq 为 null,则添加四个字符 “null”。
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”。
相关文章推荐
- JDK源码阅读——java.lang.Runable
- 读jdk源码的第一天——java.lang.AutoCloseable
- JDK源码阅读——java.lang.Cloneable
- jdk源码阅读之 java.lang.Iterable
- JDK源码阅读——java.lang.Readable
- JDK源码阅读——java.lang.Boolean
- JDK源码阅读——java.lang.Character
- JDK源码阅读——java.lang.Iterable
- JDK源码阅读第二天——java.lang.CharSequence
- JDK源码阅读——java.lang.Thread.UncaughtExceptionHandler
- JDK源码阅读系列(1) java.lang.Object
- JDK源码阅读——java.lang.Comparable
- JDK源码分析:java.lang.Boolean
- java.lang.Thread源码阅读笔记
- JDK源码阅读—基本集合类(java.util)
- JDK源码——java.lang
- java源码阅读-java.lang.String(01)
- 【JDK】:java.lang.Integer源码解析
- JDK源码分析-java.lang.Boolean
- JDK源码解析基础篇--java.lang.Object及其方法约定