Java变量作用域分局部、实例、静态三类:局部变量在方法或代码块内声明,需显式初始化且作用域限于对应大括号;实例变量属对象,有默认值,可被类中非静态方法访问;静态变量属类,全实例共享,随类加载存在。

Java变量不是“声明了就能用”,关键要看它在哪声明、谁能看到、什么时候能用。搞不清这点,编译报错、值为空、变量找不到,都是常事。
局部变量:方法或代码块里临时用的
在方法内部、for循环里、甚至一对大括号{}中定义的变量,都属于局部变量。它的命很短——从声明那行开始,到对应的大括号结束就没了。
- 必须显式初始化才能使用,比如 int count; 声明后直接 System.out.println(count); 会编译失败
- 同一个方法里,不能重复声明同名变量;但内层代码块可以定义同名变量,会遮蔽外层(不推荐)
- for循环里的 i、String msg = "hello" 都是典型例子,出了循环就访问不到
实例变量:每个对象自己带一份
写在类里、方法外的变量,属于对象本身,也叫成员变量。只要对象还在,它就在。
- 不用手动初始化也能用,系统会给默认值:数字类型是0,布尔是false,引用类型是null
- 可以在类的任意非静态方法里访问,比如构造器、普通方法、getter/setter
- 如果方法里声明了同名局部变量,会盖住实例变量,要用 this.name 明确指代
静态变量:全类共用一份
加了 static 修饰的变量,属于类而不是某个对象。所有实例共享同一份数据。
立即学习“Java免费学习笔记(深入)”;
- 随类加载而存在,生命周期最长,直到程序结束
- 可以直接用 类名.变量名 访问,比如 Counter.total,无需创建对象
- 初始化方式灵活:声明时赋值、静态代码块里赋值、或者在静态方法中首次设置
命名和使用的小提醒
变量名要见名知意,别用 a、tmp 这类模糊名字。基本规则是小驼峰:userName、fileSize;常量全大写加下划线:MAX_RETRY、DEFAULT_PORT。
- 类型必须明确,int、String、List<String> 都得写清楚
- 一行声明多个变量虽语法允许(如 int x, y, z;),但建议分开写,更易维护
- 作用域越小越好——能用局部变量,就别提成实例变量;能用实例变量,就别轻易上 static


















