静态变量的访问权限由public、protected、default、private决定,与static无关;static仅决定归属类或对象;应通过类名访问静态成员;静态方法只能访问静态成员。

静态变量的访问控制权限,和普通成员变量一样,由 public、protected、default(包级)、private 四种修饰符决定,和是否加 static 无关。也就是说,static 只管“属于类还是对象”,而访问权限修饰符才管“谁能看见、谁能用”。
静态变量的权限规则和普通变量完全一致
无论有没有 static,只要修饰符相同,可访问范围就一样:
-
public static int count; → 所有类都能通过
ClassName.count访问 - protected static String name; → 同包类、不同包子类可通过类名或继承关系访问
-
static double price;(默认权限)→ 仅同包内类可用
ClassName.price - private static boolean initialized; → 只能在本类内部使用,连子类都不行
访问方式推荐用类名,不是对象名
静态变量属于类,不是某个实例,所以应优先通过类名调用:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- ✅ 推荐:
MyClass.VERSION、MyClass.incrementCounter() - ⚠️ 不推荐:
obj.VERSION或obj.incrementCounter()—— 虽然语法允许,但易误解为实例行为,IDE 通常会警告
权限 + static 的典型用途
结合使用时,常见场景有明确分工:
-
public static final → 定义全局常量,如
Math.PI、StringUtils.EMPTY - private static → 封装类内部共享状态,比如单例的 instance、缓存 map、日志器 logger
- protected static → 父类提供给子类复用的共享资源(较少见,需谨慎设计)
- default static → 同包工具类中的辅助变量,如测试计数器、模拟配置
注意:静态方法只能访问静态成员
这是关键限制,和权限无关,而是生命周期决定的:
- 静态方法在类加载时就存在,此时对象还没创建,所以不能直接访问
this、实例变量或实例方法 - 哪怕一个
private int x是本类的,静态方法里也不能写x++;必须是private static int x才能被静态方法读写 - 想在静态方法中用实例成员?得先 new 对象,再通过对象访问 —— 但这已脱离“静态”的初衷
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










