局部变量 — 仅在方法或代码块内部声明和存在,自动不会初始化。使用未初始化的局部变量会导致编译错误。
实例变量(非静态字段)— 属于每个对象,初始化在创建对象实例时。
静态变量(静态字段)— 对于类的所有实例是共享的,整个类中只有一个实例。一个对象中的修改在该类的所有其他对象中可见。
public class Example { private int instanceVar; // 实例变量 private static int staticVar; // 静态变量 public void foo() { int localVar = 0; // 局部变量 } }
静态变量可以是私有的,它们在不同的类实例之间是如何可见的?
答案: 是的,静态变量可以是私有的。它们的修改会影响所有类的实例,因为它们属于类而不是对象。
public class MyClass { private static int counter = 0; public MyClass() { counter++; } public static int getCounter() { return counter; } }
创建多个MyClass的实例会增加同一个计数器。
故事
在企业应用中,开发者错误地将用户状态放入静态字段。这导致用户在多用户环境中"看到"彼此的数据。
故事
在编写多线程应用时,实例变量在静态方法中使用,而没有正确同步。这导致了数据竞争和意外结果。
故事
开发者决定用局部变量替代类字段来存储中间结果。变量在方法结束后被销毁,程序总是返回null,这在测试中没有立即发现。