You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否可以访问类的private修饰静态变量与静态方法?

private修饰的静态属性访问规则

常规语法访问:不允许

  • private是Java中权限最严格的访问修饰符,被其修饰的成员(包括静态变量、静态方法、实例变量、实例方法)仅允许在定义该成员的类内部访问
  • 你给出的示例代码中如果把static int a = 50修改为private static int a = 50,HelloWorld类是和A类平级的外部类,直接调用A.a会触发编译报错,根本无法运行。

特殊场景:反射可实现访问

如果有特殊需求必须在外部类访问该private静态变量,可以使用Java反射机制绕过访问权限校验,示例代码如下:

import java.lang.reflect.Field;

class A{
    private static int a = 50;
}

public class HelloWorld{
    public static void main(String []args) throws NoSuchFieldException, IllegalAccessException {
        System.out.print("A.a =  ");
        // 获取A类的a字段对象
        Field field = A.class.getDeclaredField("a");
        // 绕过访问权限检查
        field.setAccessible(true);
        // 读取静态属性值,静态属性不需要传实例对象,填null即可
        int aValue = (int) field.get(null);
        System.out.println(aValue);
    }
}

上述代码运行后依然可以输出A.a = 50。

注意:反射绕过访问权限的操作会破坏类的封装性,非必要场景不推荐使用。

内容的提问来源于stack exchange,提问作者DEV_BOT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:15:03