private 私有的 属性、方法、构造方法
[defualt] 默认的 属性、方法、构造方法、类
protected 受保护的 属性、方法、构造方法
public 公开的 属性、方法、构造方法、类
static 静态的
1. 属性
类变量 为全类共有 可以通过 类名.属性名 访问 [重点]
类变量在类加载时分配空间,并初始化。
什么是类加载?
当JVM第1次需要某一个类的信息时,会根据classpath路径去寻找对应的class文件
并将class文件读取加载到JVM的过程。一般地,一个类只发生一次类加载。
何时会发生类加载?
a 创建对象时
b 使用某个类的静态成员(属性和方法)
c 加载子类会引发父类的类加载
d 声明引用不会发生类加载
2. 方法
a 静态方法可以直接通过类名调用[重点]
b 静态方法中不能直接访问实例变量和调用实例方法
c 静态方法不依赖对象,静态方法中没有this [重点]
d 静态方法只能被静态方法覆盖,有覆盖没有多态
3. 初始代码块
初始代码块在对象创建时(属性初始化阶段)执行,
执行的次数跟构造方法的执行次数相同,并且早于构造方法。
静态代码块在类加载时执行,类加载只发生一次,静态代码块也就只执行一次。
final 最终的
1 变量
常量 一旦赋值不能再次赋值。
final修饰简单变量,变量中保存的值不会发生改变
final修饰引用,引用中保存的地址值不会发生改变,引用不能指向新的对象
final 修饰实例变量,有且必须在属性初始化或者构造方法中把握1次赋值机会
final 修饰类变量,有且必须在属性初始化或者静态代码块中把握1次赋值机会
2 方法
最终的方法,不能被子类覆盖
3 类
最终的类不可以被继承
abstract 抽象的 【重点】
1 类
抽象类可以声明引用,但不能直接创建对象
2 方法
抽象方法有声明没有实现,有抽象方法的类一定是抽象类。
如果子类继承一个有抽象方法的抽象父类,
要么继续的成为抽象类,要么实现父类中的所有的抽象方法
抽象的作用: 利用抽象类和抽象方法更好的体现“父类抽取子类共性”设计原则。
修饰符连用
能否连用,取决于修饰符修饰同1组成部分时的效果是否有不可弥合的矛盾。
private、final、static可以连用,但都不可以跟abstract连用。