静态方法可直接访问本类静态字段(如number),无需类名前缀或this,但不可访问实例成员;private静态字段在同类内仍可直接访问;跨类推荐用classname.fieldname形式。

静态方法可以直接访问静态字段,无需任何额外操作——因为它们同属类级别,共享同一作用域。
静态字段在静态方法中直接使用
静态方法内部可以自由读写本类声明的静态字段,只要字段可见(如 public、protected 或默认包访问权限),且未被 final 修饰锁定值。
- 不需要加类名前缀(如 Person.number),直接写字段名即可(如 number)
- 也不允许用 this.number —— 静态上下文没有 this 引用
- 若字段是 private,仍可直接访问(同类内不受访问修饰符限制)
常见错误:误用实例成员
静态方法不能直接访问非 static 字段或方法。比如下面代码会编译失败:
- name 是实例字段 → 不能直接写 name
- getName() 是实例方法 → 不能直接调用 getName()
- 即使传入对象参数,也必须通过该参数引用访问:person.getName() 是合法的
推荐写法与注意事项
为提高可读性和避免歧义,建议:
- 跨类访问时,统一用 ClassName.fieldName 形式(如 Math.PI)
- 同个类内,可省略类名,但不要混用 this.field(语法错误)或 instance.field(逻辑误导)
- 静态字段未初始化时默认为对应类型的零值(int 为 0,Object 为 null),注意空指针风险
实际例子
以下代码能正常运行并输出 我是静态方法1001:
- 静态字段 number 在类加载时初始化为 1000
- 静态方法 play() 内直接修改 number++
- 再次调用时,值已变为 1001,所有实例看到的都是这个更新后的值











