成员变量作用域为整个类且有默认初始化值,局部变量作用域限于代码块且必须显式初始化;同名时局部变量优先,成员变量需用this访问;成员变量可加多种修饰符,局部变量仅支持final。

作用域范围不同
成员变量定义在类体内部、所有方法之外,整个类中任意位置(包括方法、构造器、代码块)都能直接访问。比如 private String name; 写在类开头,所有实例方法里都能用 name。
局部变量只存在于方法体内、形参列表、for/while循环、if语句块等花括号 {} 包裹的范围内。一旦离开这个作用域,变量就不可见。例如 void print() { int x = 5; } 中的 x,出了 print() 方法就无法使用。
默认初始化值要求不同
成员变量有系统自动赋予的默认值:基本类型如 int 默认为 0,boolean 默认为 false,引用类型默认为 null。即使不写赋值语句,也能直接读取或参与运算。
局部变量没有默认值。必须在声明后、首次使用前显式赋值,否则编译报错:"variable might not have been initialized"。例如 int y; 后不写 y = 10; 就调用 System.out.println(y);,编译器会拒绝通过。
同名时谁优先?
当方法内定义了与成员变量同名的局部变量,比如类里有 String title;,方法中又写 String title = "Java";,那么该方法内所有未加 this. 的 title 都指局部变量——这是就近原则。
若想访问被遮蔽的成员变量,需显式用 this.title。
修饰符限制也体现作用域本质
成员变量可加 public、private、static、final 等修饰符,因为它的作用域跨越多个方法,需要访问控制和共享策略。
局部变量只能用 final(表示不可重新赋值),不能加 public、static 等——它本就不对外暴露,也不属于类结构的一部分。









