成员变量定义在类内方法外,属对象或类,存于堆内存,有默认值,作用域为整个类;局部变量定义在方法、构造器或代码块内,存于栈内存,无默认值,方法结束即销毁。

最直接的区分方式看定义位置:写在类里、所有方法外面的是成员变量;写在方法内部、构造器里或代码块(比如 if、for 的大括号内)的是局部变量。
看作用范围和使用场景
成员变量属于对象或类本身,整个类里的所有方法都能访问它,适合保存对象的状态信息,比如学生的姓名、年龄。
- 一个 Person 类中定义的 name 和 age,所有方法如 say()、run() 都可以直接使用
- 不同对象拥有各自独立的副本,小明的 age 不会影响李华的 age
看生命周期和内存位置
成员变量随对象一起诞生,存在堆内存中;局部变量只在方法执行时存在,存在栈内存中,方法结束就自动消失。
- 调用 calc() 方法时定义的 int x = 10;,方法一返回,x 就没了
- 而类里的 private String id;,只要对象还在,它就一直存在
看是否需要手动赋值
成员变量有默认值(int 是 0,String 是 null),不赋值也能编译通过;局部变量必须显式初始化,否则编译报错 “variable might not have been initialized”。
- 类里写 String msg; → 合法,msg 默认为 null
- 方法里写 String msg; 然后直接 System.out.println(msg); → 编译失败
看同名时谁优先
如果局部变量和成员变量重名,方法内部默认使用局部变量,成员变量被“遮蔽”;想访问同名成员变量,得加 this.。
- void setName(String name) { this.name = name; } 中,左边 name 是成员变量,右边是参数(局部变量)
- 不加 this.,赋值就变成了自己给自己赋值,成员变量实际没变
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











