Java 变量类型⚓︎
约 752 个字 26 行代码 预计阅读时间 4 分钟
Java 语言支持的变量类型有:
- 局部变量(Local Variables)
- 成员变量或实例变量(Instance Variables)
- 静态变量或类变量(Class Variables)
- 参数变量(Parameters)
从 作用域、生命周期、初始化、声明、赋值、限制、内存管理、垃圾回收、重用、参数和返回值 十个维度讲解。
一个大致的表格
| 维度 | 静态变量 | **成员变量 ** | **局部变量 ** | 参数变量 |
|---|---|---|---|---|
| 定义位置 | 类体内,有 static 关键字。 |
类体内,无 static 关键字。 |
方法体内、代码块内。 | 方法声明的括号内。 |
| 作用域 | 整个类。所有对象共享,可通过类名直接访问。 | 整个对象。每个对象拥有一份独立的拷贝。 | 仅在定义的方法/块内 有效。 | 仅在所属的方法体内 有效。 |
| 生命周期 | 随类加载而产生,随类卸载而消失(最长)。 | 随对象创建而产生,随对象被 GC 回收而消失。 | 方法被调用时创建,方法执行结束即销毁。 | 方法被调用时传入,方法执行结束即销毁。 |
| 内存分配 | 方法区 (Method Area) | 堆 (Heap) | 栈 (Stack) | 栈 (Stack) |
| 初始值 | 有默认初始值(如 int 为 0, boolean 为 false)。 | 有默认初始值。 | 无默认值。必须在使用前手动初始化,否则报错。 | 调用方在传参时赋予初始值。 |
| 修改方式 | 类名.变量名 或 对象名.变量名。 | 对象名.变量名。 | 直接通过变量名赋值。 | 方法内部可直接赋值,但不影响方法外的原始变量(针对基本类型)。 |
局部变量⚓︎
- 必须初始化,否则编译器会报错,因为 Java 不会为局部变量提供默认值。但是声明后不使用的话不会报错。
- 内存管理:局部变量存储在 Java 虚拟机(JVM)的栈上,与存储在堆上的实例变量或对象不同。
成员变量⚓︎
声明:访问修饰符+变量类型+名称(+赋值)
- 当一个对象被实例化之后,每个成员变量的值就跟着确定。可赋值更改
- 每个对象都有一个相应变量,初始化时的值相同,后续可根据对象自身进行修改-无尽拷贝--> 内存劣势
类变量⚓︎
- 在类中使用
static关键字修饰变量,通常也称为类变量。 - 无论创建多少个类实例,静态变量在内存中只有一份拷贝,被所有实例共享。<--> 内存优势!
- 可以通过
类名来访问静态变量,也可以通过实例名来访问静态变量。(指针一样的,改了就是全部都改掉),相当于快捷方式。 - 常量 也是与类相关的,但它是用
final关键字修饰的变量,一旦被赋值就不能再修改。静态变量可以是常量。 static final---真常量final---不可变的个人属性- 静态变量的线程安全性