Java中静态变量跨包访问需满足public和static两个条件,通过类名直接调用;常见错误包括缺public、局部static、误用对象访问;推荐用public static final、静态getter或单例封装提升安全性。

Java 中静态变量在不同包中访问,核心就一条:用 public static 修饰变量,并通过 类名.变量名 直接调用。
必须满足两个前提条件
静态变量要能被其他包访问,缺一不可:
-
访问权限足够:变量必须声明为
public(不能是default、protected或private); -
属于类而非实例:必须用
static修饰,这样它才属于类本身,不依赖对象创建。
具体操作步骤
分三步走,每步都关键:
-
在源包中定义公共静态变量:比如在
com.utils.Config类里写public static String API_URL = "https://api.example.com";; -
在目标包中导入该类:用
import com.utils.Config;(推荐精确导入,不用*); -
直接通过类名访问:如
String url = Config.API_URL;,无需 new 对象,也不需要 getter 方法。
常见错误与避坑提示
很多人卡在这几个地方:
立即学习“Java免费学习笔记(深入)”;
- 把变量写成
static int count;(缺public)→ 其他包无法访问; - 在方法内部定义
static int temp = 5;→ 编译报错,static 不能用于局部变量; - 试图用对象引用访问:
new Config().API_URL→ 虽然语法不报错,但违背静态本意,且易误导; - 跨包用了
protected静态变量 → 只有继承它的子类才能访问,不是所有包都能用。
替代方案:比 public static 更安全的做法
如果担心全局可改带来风险,推荐以下方式:
-
只公开读取,禁止外部修改:用
public static final String VERSION = "1.2.0";(常量); -
提供静态 getter 方法:变量设为
private static,再加一个public static String getApiUrl(); - 用单例类封装共享状态:比裸 static 变量更可控,适合需要初始化逻辑或线程安全的场景。


















