Java 三大修饰符

Java 三大修饰符

一、abstract 抽象

1. 修饰类(抽象类)

  1. 语法:abstract class 类名{},编译生成独立 class 文件
  2. 不能 new 对象,仅可声明引用;有构造方法,供子类创建对象调用
  3. 可包含普通变量、普通方法、抽象方法

2. 修饰方法(抽象方法)

  1. 语法:abstract 返回值 方法名(参数);,无方法体 {}
  2. 只能存在于抽象类中
  3. 子类规则:非抽象子类必须重写全部抽象方法;不重写则子类必须 abstract
  4. 作用:强制多态,规范子类行为

二、static 静态(属于类,全局共享)

1. 修饰变量(静态变量 / 类变量)

  1. 所有对象共用一份,一处修改全部同步
  2. 推荐访问:类名.变量,不推荐对象调用

2. 修饰方法(静态方法)

  1. 只能直接访问静态成员,不能直接访问实例变量 / 普通方法
  2. 不能使用 this、super
  3. 可继承,仅能被静态方法重写,无多态
  4. 想使用非静态成员:new 对象调用

3. 代码块

  1. 普通代码块(无 static):创建对象时执行,初始化实例属性
  2. 静态代码块:类加载时执行,仅执行一次,初始化静态属性

4. 类加载时机

  1. 首次 new 对象
  2. 首次调用静态变量 / 静态方法
  3. 加载子类必先加载父类
  4. 仅声明引用不会触发类加载

5. 修饰内部类:静态内部类

三、final 最终(不可修改)

1. 修饰变量(常量)

  1. 仅能赋值一次,赋值后不可修改
  2. final 实例变量:声明赋值 / 构造器赋值 / 普通代码块赋值
  3. final 静态变量:声明赋值 / 静态代码块赋值
  4. final 引用:对象地址不变,对象内部属性可改

2. 修饰方法

可继承,禁止子类重写

3. 修饰类

不能被继承,无子类(如 String、Math、System)

核心区分速记

  1. abstract:约束子类,强制重写;抽象类不能实例化
  2. static:归属于类,全局一份;静态不能访问实例、无 this
  3. final:锁死不可变;变量不能改、方法不能重写、类不能继承