Java 三大修饰符
一、abstract 抽象
1. 修饰类(抽象类)
- 语法:
abstract class 类名{},编译生成独立 class 文件 - 不能 new 对象,仅可声明引用;有构造方法,供子类创建对象调用
- 可包含普通变量、普通方法、抽象方法
2. 修饰方法(抽象方法)
- 语法:
abstract 返回值 方法名(参数);,无方法体 {} - 只能存在于抽象类中
- 子类规则:非抽象子类必须重写全部抽象方法;不重写则子类必须 abstract
- 作用:强制多态,规范子类行为
二、static 静态(属于类,全局共享)
1. 修饰变量(静态变量 / 类变量)
- 所有对象共用一份,一处修改全部同步
- 推荐访问:
类名.变量,不推荐对象调用
2. 修饰方法(静态方法)
- 只能直接访问静态成员,不能直接访问实例变量 / 普通方法
- 不能使用 this、super
- 可继承,仅能被静态方法重写,无多态
- 想使用非静态成员:new 对象调用
3. 代码块
- 普通代码块(无 static):创建对象时执行,初始化实例属性
- 静态代码块:类加载时执行,仅执行一次,初始化静态属性
4. 类加载时机
- 首次 new 对象
- 首次调用静态变量 / 静态方法
- 加载子类必先加载父类
- 仅声明引用不会触发类加载
5. 修饰内部类:静态内部类
三、final 最终(不可修改)
1. 修饰变量(常量)
- 仅能赋值一次,赋值后不可修改
- final 实例变量:声明赋值 / 构造器赋值 / 普通代码块赋值
- final 静态变量:声明赋值 / 静态代码块赋值
- final 引用:对象地址不变,对象内部属性可改
2. 修饰方法
可继承,禁止子类重写
3. 修饰类
不能被继承,无子类(如 String、Math、System)
核心区分速记
- abstract:约束子类,强制重写;抽象类不能实例化
- static:归属于类,全局一份;静态不能访问实例、无 this
- final:锁死不可变;变量不能改、方法不能重写、类不能继承
