成员变量必须定义在类内、方法外,分实例变量(无static,各对象独立)和静态变量(有static,类加载时初始化、所有实例共享);默认有初值但显式初始化更安全;推荐private+final+防御性拷贝保障封装与安全。
成员变量的声明位置和语法
Java中成员变量必须定义在类内部、方法外部,不能写在方法里或代码块中。它属于类或实例,生命周期与对象或类本身绑定。
基本语法是:修饰符 数据类型 变量名 [= 初始值];
-
private int count = 0;是典型的实例成员变量,每个对象独立一份 -
public static final String VERSION = "1.2";是类变量(静态常量),所有实例共享 - 不加
static就是实例变量;加了static就是类变量,注意二者内存归属和初始化时机不同
实例变量 vs 静态变量的区别
关键不在“能不能用”,而在“谁持有”和“何时初始化”。
- 实例变量:随对象创建而分配内存,
new MyClass()时才初始化,不同对象互不影响 - 静态变量:类加载时就分配内存,只有一份,所有实例共享;即使没创建任何对象也能通过
MyClass.staticVar访问 - 静态变量不能直接访问实例变量(会报错
non-static variable xxx cannot be referenced from a static context)
初始化方式和常见陷阱
成员变量有默认初始值(如 int 是 0,Object 是 null),但显式初始化更安全、意图更清晰。