Java 关键字
Java 关键字
按用途划分如下:
- 数据类型:13
- boolean、byte、char、 double、 float、int、long、short
- new、void、instanceof
- 语句:17
- break、continue
- default
- return、throw
- this、 super。
- do、 for、while、
- if、else、switch、case、
- try、catch、 finally
- 修饰:10
- private、 protected、public
- abstract、final、static
- native、synchronized、transient、 volatile
- 方法、类、接口、包和异常:7
- class、 extends
- implements、interface
- package、import
- throws
- 保留字:9
- future、 generic、 operator、 outer、rest、var
- goto、const、null
static
static:静态、全局
可修饰成员变量和方法,在类中共享。
静态结构
静态属性:使用
static
修饰的成员变量,称为静态变量。
- 实例变量:
- 每个实例拥有独立的数据,互不影响。
- 通过实例名访问。
- 类变量(静态变量):
- 同一个类的实例共享的数据。
- 使用
static
修饰。 - 通过类名访问。
静态方法:使用
static
修饰的方法,称为静态方法。
- 实例方法:通过实例名访问。
- 类方法(静态方法):使用
static
修饰,通过类名访问。- 只能访问 static 结构(属性、方法)。
- Java 程序入口
main()
也是静态方法。 - 通常用于工具类方法。
- Arrays.sort()
- Math.random()
特点
-
静态结构不属于实例,而是属于类。
-
即使通过实例名访问静态结构,编译器会自动转换为通过类名访问的形式。
(原理:👉 字节码技术 2.2 - 方法调用)
思考
静态变量的加载时机
- 类加载阶段:加载、链接(验证、准备、解析)、初始化。
- 链接 - 准备阶段:为 static 变量分配空间、赋默认值。
- 此阶段仅设置默认值,在初始化阶段才对变量赋值。
- 若为 final static 或 final String,在此阶段赋值。
程序中大量使用静态结构的问题
- 静态变量:内存问题。
- static 变量会在类加载阶段分配内存空间。
- 不会被垃圾回收,可能导致堆内存 OOM。
- 静态方法:不支持多态,线程安全问题。
- 若方法与实例对象有逻辑相关性(多态),不能使用静态方法。
- 静态方法是类方法,多线程下更容易发生线程安全问题。
final
final:最终的
好处
- 提高性能,JVM 和 Java 应用都会缓存 final 变量。
- 线程安全,多线程下共享时不需要额外的同步开销。
- JVM 会对方法、变量及类进行优化。
修饰结构
可修饰结构
-
类:无法被继承。
-
方法:无法被重写。
-
属性:初始化后无法被重新赋值。
-
数据类型:
- 基本类型:无法修改值。
- 引用类型:无法修改对象引用,但可以修改对象内容。
-
初始化时机:
-
成员变量:声明时初始化、构造方法初始化。
-
局部变量:声明时初始化。
-
方法参数:方法调用时初始化。
(相关知识:JVM 编译期优化 - 匿名内部类)
-
-
命名规范:变量名大写,多个单词使用下划线分隔。
-
不可修饰结构
- 抽象类:抽象类需要被继承,与 final 矛盾。
- 构造方法:构造方法不能被继承和重写,final 修饰无意义。
关键字对比
- abstract:与 final 作用相反,无法同时使用。
- finally:用于异常处理。
- finalize():析构方法,垃圾回收前被 JVM 调用