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

本文详细解析了JDK 1.8中的Appendable接口,包括其功能、实现类、版本信息及源码分析。并介绍了如何使用实现类StringBuffer配合Formatter进行格式化输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

接口

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”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值