Java 三个修饰符 相关知识点

1.static修饰符

核心作用

· 属于类级别(而不是对象实例),在类加载时初始化,所有实例共享一份。

常见用法

· 静态变量:所有对象共享,可通过类名直接访问。

· 静态方法:只能直接访问静态成员,不能使用 this,也不能直接调用非静态方法(必须通过对象调用)。

· 静态代码块:类加载时执行一次,常用于初始化静态资源。

· 静态内部类:不依赖外部类实例,可以独立创建(new Outer.Inner())。

注意点

· 静态方法不能被重写(Override),但可以被子类隐藏(即子类定义同名静态方法,调用时看引用类型)。

· 静态方法中不能使用 super 和 this 关键字。

2.final修饰符

核心作用

· 表示"最终的"、"不可改变的",用于限制继承、重写和赋值。

常见用法

· final 变量:

· 基本类型:值不可变。

· 引用类型:引用地址不可变(但对象内部状态可以改变)。

· 必须在声明时、构造器或代码块中完成初始化(空白 final)。

· final 方法:子类不能重写,但可以继承使用(主要为了防止子类修改逻辑)。

· final 类:不能被继承(例如 String、Integer 包装类都是 final 类)。

注意点

· final 修饰的参数:方法内部不能修改参数的值(引用不能指向新对象)。

· final 与性能:早期 JVM 可能优化,但现代 JVM 已不太依赖此关键字进行优化。

3.abstract修饰符

核心作用

· 表示"抽象的",用于定义模板,强制子类实现。

常见用法

· 抽象类:

· 不能实例化(new),只能被继承。

· 可以包含抽象方法和具体方法。

· 可以有构造器(供子类调用)。

· 抽象方法:

· 没有方法体,以分号结束(public abstract void method();)。

· 必须由非抽象子类实现。

注意点

· 抽象方法不能是 private、static、final 或 synchronized(因为抽象方法需要被子类覆盖,而 private 不可见,static 属于类,final 禁止重写,synchronized 是方法实现层面的修饰,没有方法体则无意义)。

· 抽象类中不一定必须有抽象方法,但含有抽象方法的类一定是抽象类。

  1. 三者组合规则(重点)

在定义类、方法时,这三个修饰符可以部分组合,但有严格限制:

组合情况 是否允许 说明

static final 变量 ✅ 常量(通常加上 public static final 定义全局常量)。

static final 方法 ✅ 静态常量方法(很少用,因为静态方法不能被重写,final 无实际意义)。

abstract static 方法 ❌ 抽象方法不能是静态的(静态方法属于类,不能被覆盖,与抽象矛盾)。

abstract final 方法 ❌ 抽象方法必须被重写,final 禁止重写,冲突。

abstract private 方法 ❌ 抽象方法需要子类实现,private 子类不可见,冲突。

abstract 类可以包含 final 方法 ✅ 抽象类中可以有具体 final 方法(子类继承但不能重写)。

abstract 类可以包含 static 方法 ✅ 抽象类中可以定义静态方法,子类继承静态方法。

final 类中不能有 abstract 方法 ❌ final 类不可被继承,而抽象方法必须靠子类实现,矛盾。

  1. 常见面试题关联

· static 方法能否被重写?

答:不能,静态方法是编译时绑定,子类定义同名静态方法属于"隐藏",不是重写。

· final、finally、finalize 的区别

· final:修饰符,表示不可变。

· finally:异常处理块,无论是否异常都执行。

· finalize:Object 类的方法,垃圾回收前调用(已废弃)。

· 抽象类与接口的区别(涉及 abstract 和 default、static 方法)。

· 为什么抽象方法不能是 static 或 private?

答:因为抽象方法需要被子类实现,static 属于类无法被覆盖,private 子类不可见。

相关推荐
我命由我12345几秒前
PHP - PHP 简易 Web 服务器、基础接口开发
服务器·开发语言·前端·php·intellij-idea·idea·intellij idea
Reload.1 分钟前
CZ航司,shopping JS逆向 acw_sc__v2
开发语言·javascript·python·网络爬虫·ecmascript
码界筑梦坊2 分钟前
130-基于Python的体育用品销售数据可视化分析系统
开发语言·python·信息可视化·flask·毕业设计
码界筑梦坊3 分钟前
131-基于Flask的美国新泽西州自动售货机销售数据可视化分析系统
开发语言·python·信息可视化·数据分析·flask·毕业设计
闪电悠米4 分钟前
黑马点评短信登录01_session_sms_login
java·spring boot·redis·git·spring·面试
努力努力再努力wz4 分钟前
【QT入门系列】QWidget 六大常用属性详解:windowOpacity、cursor、font、focus、toolTip 与 styleSheet
android·开发语言·数据结构·c++·qt·mysql·算法
Advancer-6 分钟前
黑马点评plus --异步秒杀重构升级
java·spring boot·重构·intellij-idea
神仙别闹7 分钟前
基于MFC(C++)实现(界面)学委作业管理系统
开发语言·c++·mfc
三品吉他手会点灯7 分钟前
C语言学习笔记 - 41.数据类型 - scanf函数核心知识点复习
c语言·开发语言·笔记·学习
撩得Android一次心动8 分钟前
C语言基础笔记3【个人用】
android·c语言·开发语言·笔记