我们来看一下AbstractStringBuilder类
- 这个抽象类不是public类 也无法new一个匿名类
- 这个类是StringBuilder StringBuffer 的**直接父类** 可以说基本上这两个类实现的基本是父类里面定义的方法
基于第二点 我们就有必要来好好了解一下这个类 这让我们学习StringBuilder 和StringBuffer更加明细里面的细节
类的声明
abstract class AbstractStringBuilder implements Appendable, CharSequence //该类实现了两个接口(行为) 同时也是这个抽象类的特征 //CharSequence (字符序列接口) 要实现 1.规定获取字符长度 int length(); 2.规定字符串单个字符的查找, char charAt(int index); 3.规定得到该字符串的子序列 CharSequence subSequence(int start, int end); 4.重写了父类Object的toString() //Appendable 定义添加的规则 1.Appendable append(CharSequence csq) throws IOException; ---> 如何添加一个字符序列 2. Appendable append(CharSequence csq, int start, int end) throws IOException; ----> 如何添加一个字符序列的一部分 3.Appendable append(char c) throws IOException; ---> 如何添加一个字符
成员变量
char[] value;
int count;
从这里可以看出与String的区别 String 是final 这里定义的 是一个动态数组 可供我们灵活的在原数组上操作
构造方法
AbstractStringBuilder() {}
AbstractStringBuilder( int capacity){value = new char[capacity];}
两种构造方法 提供了一个初始化容量的构造方法
常用方法
/* public int length() 返回存储的实际长度 */ /* public int capacity() 返回valve[]数组当前存储的实际长度,对于数组来说 就是初始化的长度 在没有进行扩容之前不会改变 */ /* public void ensureCapacity(int minimumCapacity) 用来确保value数组的容量是否够用, 如果不够用时,就会调用newCapacity(minimumCapacity)方法扩容,参数为需要的容量 */ /** * * private int newCapacity(int minCapacity) * 扩容方法 扩容是原来的两倍加2 */ /* 处理边界容量 如果进入到该方法 最小容量为Integer.MAX_VALUE - 8 但不超过Integer.MAX_VALUE private int hugeCapacity(int minCapacity) */ /* public void trimToSize() 如果value数组的容量有多余的,那么就把多余的全部都释放掉 */ /* public void setLength(int newLength) 设置新的长度 容量不够 就扩大容量 用0填充 */ StringBuilder sb4 = new StringBuilder("nihao"); /* public char charAt(int index) 字符串单个字符的查找 */ /* public int codePointAt(int index) 返回指定索引处的字符 */ /* public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 把value[] 数字加到目标数字的detBegin后面 */ /* public void setCharAt(int index, char ch) 指定索引处的值为ch */ /* public AbstractStringBuilder replace(int start, int end, String str) 换目标 此方法 替换一个位置的字符串 且在有必要的情况下 扩容容纳指定字符串 */ /* public String substring(int start)---->得到一个子串 public CharSequence subSequence(int start, int end)------> 得到一个子序列 */ /* public AbstractStringBuilder insert(int offset, Object obj) 在value[] 的offset 插入String.valueOf(obj) */ /* public int indexOf(String str) 在value[]中找字符串str,若能找到,返回第一个字符串的第一个字符的下标 */ /* public AbstractStringBuilder reverse() 将value给倒序存放(注意改变的就是本value,在本value上面反转) */