局部变量定义在方法、构造器或代码块内,作用域限于该范围,无默认值,存于栈中;成员变量定义在类内方法外,属整个类,有默认值,随对象存于堆中,可加访问修饰符。

看定义位置最直接:局部变量写在方法、构造器或代码块里面;成员变量写在类里、所有方法外面。
看定义位置和作用范围
局部变量只能在它出现的那一段代码里用,比如一个 for 循环里声明的 int i,出了循环就不能访问;方法参数也是局部变量,只在该方法体内有效。成员变量属于整个类,只要在类内部,任何方法、构造器、代码块都能直接用,不需要重复声明。
看有没有默认值
成员变量系统自动给默认值:int 是 0,boolean 是 false,引用类型是 null;局部变量不初始化就用,编译直接报错。这是最常踩的坑——写个 int count; 然后 System.out.println(count); 就过不了编译。
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
看内存位置和生命周期
局部变量存在栈上,方法一调用就压栈,执行完立刻弹出销毁;成员变量跟着对象走,对象在堆里,变量也在堆里,对象没被回收,变量就一直存在。静态成员变量(类变量)更特殊,存在方法区,随类加载而生,程序结束才消失。
看能不能加访问修饰符
成员变量可以加 public、private、protected、static、final 等;局部变量不能加任何访问修饰符,加了就语法错误。另外,局部变量不允许重名(同一作用域内),但局部变量可以和成员变量同名——这时局部变量会遮蔽成员变量,得用 this. 显式调用成员变量。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










