一、内部类
(一)概述
1.定义在类的内部的类和方法。成员变量同样作为类的成员
2.根据定义的位置不同,分为
(1)成员内部类
(2)局部内部类
3.成员内部类
(1)普通成员内部类
(2)私有成员内部类
(3)静态成员内部类
4.根据表示方式不同
(1)有名字的内部类
(2)匿名内部类
(二)普通成员内部类
1.定义在类成员位置的类
2.格式:
class 外部类类名{
外部类成员;
class 内部类类名{
内部类成员;
}
}
(三)私有成员内部类
1.在普通成员内部类的声明上加上private
2.格式
class 外部类类名 { 外部类成员; private class 内部类类名 { 内部类成员; } }
(四)静态成员内部类
1.格式
class 外部类类名 { 外部类成员; static class 内部类类名 { 内部类成员; } }
(五)局部内部类
定义在方法中的类
(六)匿名内部类
1.没有名字的内部类
2.使用场景:
(1)实现抽象类
(2)实现接口
3.格式
new 抽象类类名或者接口名() { 要实现的抽象方法; };
4.内部类总结
(1)有名字的内部类
成员内部类:外部类类名$内部类类名.class
局部内部类:方法所在类类名$1内部类类名.class,其中1是书写顺序,按照升序排列1,2
(2)匿名内部类:所在类类名$1.class,其中1是书写顺序,按照升序排列1,2
二、StringBuilder
(一)概述
1.StringBuilder是一个可变字符序列。因为在类中提供了修改字符串的成员方法,常用方法就是
append和insert
2.StringBuilder底层维护了一个字符数组,数组是私有的,外界无法访问,因此StringBuilder或者
StringBuffer封装了对底层操作的共有方法
3.StringBuilder和String区别
(1)String是不可变字符序列,没有提供任何修改本身的方法,StringBuilder是可变字符序列,提
供了修改自身的方法
(2)String本身长度也不可变,StringBuilder长度可变,通常我们将StringBuilder当作一个长度可
变的容器,用于存储字符
(二)构造方法
1.StringBuilder():创建一个字符串生成器,初始容量为16
2.StringBuilder(int capacity):创建一个字符串生成器,初始容量为参数决定
3.StringBuilder(String str):创建一个字符串生成器,初始化参数字符串,初始容量为16加上字
符串的长度
4.获取容积的方法
(1)length():返回字符串缓冲区中字符的个数
(2)capacity():返回字符串生成器的容量
(三)添加功能方法
1.append(任意类型)
(1)作用:将任意数据类型的参数追加到可变字符序列之后
(2)底层操作:将当前字符个数和当前数组容积进行比较,如果溢出,就做数组拷贝,将原数组
的内容添加到新的数组中,其中新数组的容积为【<<1+2】,所以数组自动增加实际上是数组的拷
贝
2.insert(int index,任意整数):可以将任意类型插入到指定位置
(四)删除功能方法
1.delete(int start,int end):删除字符串缓冲区上一段字符串,不包含结束索引
2.deleteCharAt(int index):删除字符串缓冲区上指定索引的字符
(五)替换和反转
1.replace(int start,int end,String str):使用指定字符串,替换原有的字符序列中的一部分内
容
2.reverse():反转字符串缓冲区
(六)StringBuilder和StringBuffer区别
1.共同点:都是可变字符序列,都是字符串生成器,都是字符串缓冲区
2.不同点
(1)线程安全性不同
StringBuilder:线程不安全,多线程环境下无法保证数据安全
StringBuffer:线程安全,多线程环境下依然可以保证数据安全
(2)效率不同
StringBuilder:效率高
StringBuffer:效率低
(3)版本不同
StringBuilder:出现在JDK5.0
StringBuffer:出现在JDK1.0