ArrrayList
是java编写的一个类,表示一个长度可以变化的容器
集合与数组区别
- 共同点: 都是存储数据的容器
- 不同点: 数组容器的长度是固定的, 集合容器的长度是可变的
如果存储的数据, 长度经常发生改变, 推荐使用集合
注意事项:
- ArrayList是java编写的类, 我们只能使用, 创建对象的时候, 需要通过泛型指定集合容器中的数据类型
- 泛型中不能直接写基本数据类型
构造方法
ArrayList(泛型) 创建一个空的集合对象
泛型: 是一种特殊的数据类型
例:ArrayList<String>
常用方法
添加:
add(元素) 将元素添加到集合的最后
add(索引,元素) 将元素添加到集合的指定位置
删除:
remove(元素) 指定集合中的元素删除
remove(索引,元素) 删除集合中指定索引处的元素
修改:
set(索引,元素) 修改集合中指定索引处的元素
查询:
get(索引) 返回集合中指定位置的元素
size() 返回集合中的元素的个数
继承
继承就是让java中的类与类之间产生了关系,有了这种继承关系之后,可以使用子类对象,调用父类中非私有的内容
特点:
- 继承是面向对象三大特征之一。(封装,继承,多态)
- 可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
代码格式:
public class 子类类名 extends 父类类名{
// 在这里相当于已经自动拥有了父类中的非私有的内容了...
}
继承的优缺点
优点:
- 提高了代码的复用性(多个类相同的成员可以放到同一个类中)
- 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
缺点:
- 继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性
继承中成员访问特点
super关键字
- this: 代表调用该方法的对象
- super:代表父类存储空间的标识(可以理解为父类对象引用)
成员变量访问特点
- 子类局部范围找
- 子类成员范围找
- 父类成员范围找
- 如果都没有就继续找父类的父类…依次类推,直到最高父类还是找不到就报错
成员方法访问特点
- 子类成员范围找
- 父类成员范围找
- 如果都没有就继续找父类的父类…依次类推,直到最高父类还是找不到就报错
注意事项: 以上查找父类成员是基于非私有的权限的,如果是私有的,即使父类中有,那么子类是无法直接访问的
构造方法访问特点
- 每一个子类构造方法的第一条语句默认都是:super()
子类中为什么所有的构造方法默认都会访问父类中无参的构造方法呢?
因为子类对象要想使用父类的内容,就必须保证父类的对象是存在的,如果父类对象不存在,那么子类对象就无法使用父类的内容了
如果父类中没有无参构造方法,只有带参构造方法,该怎么办呢?
最靠谱的做法是 我们自己在子类的构造方法中,通过super关键字手动调用父类带参数的构造方法
方法重写
在子父类中,子类拥有和父类一模一样的方法声明,就是方法的重写,目的是为了让方法的调用者可以不改变调用方式的前提下,得到新的功能
应用场景
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容
@Override是什么及能干什么
- 是一个注解
- 可以帮助我们检查重写方法的方法声明的正确性
继承的注意事项
- Java中类只支持单继承,不支持多继承
- Java中类支持多层继承(或者叫继承具有传递性)
修饰符
对类中的成员进行修饰限定的符号(关键字)
分类
- 权限修饰符: 对权限修饰,可以控制该内容的访问范围限定;
- 状态修饰符: 对内容的状态进行修饰,可以控制如何使用这个内容;(限定使用方式)
final关键字
表示最终态的意思
能修饰什么及修饰不同对象的特点时什么
- 可以修饰类: 表明该类是最终类,不能被继承
- 可以修饰方法: 表明该方法是最终方法,不能被重写
- 可以修饰变量: 表明该变量是常量,不能再次被赋值(只能赋值一次)
final修饰基本数据类型和引用数据类型变量的不同
- 变量是基本类型: final 修饰指的是基本类型的数据值不能发生改变
- 变量是引用类型: final 修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的
static关键字
是一个静态修饰符,表示静态的意思
可以修饰类中的成员变量和成员方法
被static修饰的内容有什么特点
- 被类的所有对象共享,这也是我们判断是否使用静态关键字的条件
- 可以通过类名调用,也可以通过对象名调用,推荐使用类名调用
静态与非静态的访问特点
静态成员方法只能访问静态内容,而非静态的方法可以访问非静态内容也可以访问静态内容
原因
因为静态的内容是属于类的,所以静态的内容是随着类的加载而进入内存的,而非静态的内容是属于对象的,是随着对象的创建而存在的,它们存在的时机是不一样的,当对象创建成功的时候,静态的东西一定已经存在内存中了,而静态的内容存在于内存的时候,有可能还没有创建对象
编写工具类
如果编写一个类的时候,是描述某类事物的,可以思考这类事物中的这个功能(方法)能不能使用类直接调用,如果能,则加static,如果不能,则不加static
步骤:
- 将工具类的构造方法私有;目的是为了让使用者不要创建工具类的对象
- 给工具类中的所有方法都加上 static,目的是为了让使用者通过**类名.方法名()**的形式调用方法