1.String,StringBuffer,StringBuilder的区别
1:String 不可变的字符序列,而StringBuffer,StringBuilder 都是可变的字符序列
2:StringBuffer,StringBuilder 的区别:
3:StringBuffer的线程是安全的,效率低,数据安全
4:StringBuilder的线程是不安全的,效率高,数据不安全
StringBuffer和数组的区别?
1:StringBuffer 类的内部,维护着一个char数组,通过重载append()方法,添加进来元素都会转换为 char元素存起来,而数组 是一个容器,可以存相同类型的多个元素
2:数组的长度不能变
2.接口,内部类,匿名内部类,抽象类的区别
接口
接口中只有抽象方法,而没有非抽象方法
特点:
1:接口不能被实例化,只能通过多态的形式,让子类实例化
2:接口的子类:
A:可以是具体类,但是要求实现所有的抽象方法
B:可以是接口,使用关键字 extends
C:可以是抽象类,使用关键字 implements
内部类
特点:
1:内部类可以直接访问外部类的成员,包括私有,
2:外部类要访问内部类的成员,必须创建对象
局部内部类的访问特点
在局部内部类的 成员方法内,可以直接访问外部类的成员变量
匿名内部类
前提:需要存在一个类或者抽象类,或者接口
格式:
new 类名 或者接口名(){ 重写的方法()};
性质:
是一个继承了类或者实现了接口的 子类 的匿名对象
被abstract类修饰的类,就是抽象类
抽象类的特点:
A:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
B:抽象类不能实例化,不能创建抽象类的对象, 我们可以通过多态的形式,让抽象类的引用,指向子类对象
C:抽象类的子类 要么还是抽象类, 要么是 具体类,并实现所有的抽象方法. 抽象类的构造方法,是让子类对象,来通过构造方法初始化父类的成员变量用的。
注意事项:
1:private 不能和abstract 一起修饰方法或者修饰类
2:final 不能和abstract 一起修饰方法或者修饰类
3:static 不能和abstract 一起修饰方法
3.static关键字
可以修饰成员变量和成员方法
static关键字特点:
随着类的加载而加载
优先于对象存在
被类的所有对象共享
可以通过类名调用
static关键字注意事项:
在静态方法中是没有this关键字的
静态方法只能(直接)访问静态的成员变量和静态的成员方法
4.成员变量和局部变量区别
在类中的位置不同:
成员变量 类中方法外
局部变量 方法内或者方法声明上
在内存中的位置不同:
成员变量 堆内存
局部变量 栈内存
生命周期不同:
成员变量 随着对象的存在而存在,随着对象的消失而消失
局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同:
成员变量 有默认的初始化值
局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。