实例变量与静态变量的区别
实例变量和静态变量是Java中两种重要的成员变量,它们的主要区别如下:
基本概念
实例变量(Instance Variable)
-
属于类的实例(对象)
-
每个对象都有自己独立的实例变量副本
-
生命周期与对象相同
静态变量(Static Variable/Class Variable)
-
属于类本身,而不是类的实例
-
所有对象共享同一个静态变量
-
生命周期与程序运行周期相同
主要区别
| 特性 | 实例变量 | 静态变量 |
|---|---|---|
| 声明方式 | 不使用static关键字 | 使用static关键字 |
| 所属关系 | 属于对象 | 属于类 |
| 内存分配 | 对象创建时分配 | 类加载时分配 |
| 内存位置 | 堆内存 | 方法区(元空间) |
| 访问方式 | 通过对象引用访问 | 通过类名或对象引用访问 |
| 初始化时机 | 创建对象时初始化 | 类加载时初始化 |
| 生命周期 | 对象存在时存在 | 程序运行期间一直存在 |
| 线程安全 | 每个线程有自己的对象实例 | 共享变量,需要考虑线程安全问题 |
示例代码
public class VariableExample {
// 实例变量
int instanceVar;
// 静态变量
static int staticVar;
public static void main(String[] args) {
// 访问静态变量 - 推荐使用类名访问
VariableExample.staticVar = 10;
// 创建对象
VariableExample obj1 = new VariableExample();
VariableExample obj2 = new VariableExample();
// 访问实例变量
obj1.instanceVar = 20;
obj2.instanceVar = 30;
// 也可以通过对象访问静态变量(不推荐)
obj1.staticVar = 40;
System.out.println("obj1.instanceVar: " + obj1.instanceVar); // 20
System.out.println("obj2.instanceVar: " + obj2.instanceVar); // 30
System.out.println("staticVar: " + VariableExample.staticVar); // 40
}
}
使用场景
使用实例变量:
-
当每个对象需要有自己的属性值时
-
例如:学生类中的姓名、年龄等属性
使用静态变量:
-
当需要所有对象共享某个属性时
-
用于常量定义(通常配合
final使用) -
用于计数器等需要跨对象共享的数据
-
例如:Math类中的PI常量、统计创建的对象数量等
2万+

被折叠的 条评论
为什么被折叠?



