java: JAVA静态方法细节

  1. 静态方法直接通过类调用
java 复制代码
class A {
    static void test() {
        System.out.println("A");
    }
}

可以直接:
A.test()

当然也可以创建对象,用对象来调用:
A a = new A()
a.test()
不过编译器内部会自动将a.test()这行代码替换为A.test()
  1. 静态方法绑定引用类型
java 复制代码
对于则个代码:
class A {
    static void test() {
        System.out.println("A");
    }
}

class B extends A {
    static void test() {
        System.out.println("B");
    }
}

下面两个结果分别是什么:
情形1:
A a = new B();
a.test();
情形2:
B b = new B();
b.test();

结果是:
A
B
而非:
B
B

因为静态方法绑定引用类型,而不是实例
情形1中,A a = new B() 这行代码中 a 是引用类型A、 new B() 得到的是实例对象的类型是B,
当a调用静态方法test时,从引用类型A调用,编译器会把a.test() 变为A.test()

情形2中,B b = new B() 这行代码中 b 是引用类型B、 new B() 得到的是实例对象的类型是B,
当b调用静态方法test时,从引用类型B调用,编译器会把b.test() 变为B.test()
  1. 静态方法不能访问非静态成员、不能调用非静态方法
java 复制代码
public class StaticDemo {

    // 非静态成员变量
    private int count = 10;

    // 静态成员变量
    private static int total = 100;

    // 非静态方法
    public void printCount() {
        System.out.println("count = " + count);
    }

    // 静态方法
    public static void staticMethod() {
        // ✅ 可以访问静态成员
        System.out.println("total = " + total);

        // ❌ 编译错误:不能访问非静态成员变量
        // System.out.println(count);

        // ❌ 编译错误:不能直接调用非静态方法
        // printCount();
    }
}
相关推荐
骇客野人3 小时前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案
java·spring boot·后端
qiuhaipeng13 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
zzz_23683 小时前
个人 AI 记忆如何跨工具复用:用 Markdown、索引和 Skill 搭一个可治理的记忆库
前端·人工智能·react.js·前端框架·agent·agent测评
wxwx_bscxy3224 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
剑之所向5 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
evans在进步5 小时前
Tomcat NIO 工作原理详解:从 Acceptor、Poller 到容器处理链
java·tomcat·nio
计算机魔术师5 小时前
GPT-6 Astra幻觉砍到2%,却被一种老招数轻松绕过
前端
cjy0001116 小时前
2026AI 产品如何从一次性 Demo 变成可重复使用的业务工具?
前端·人工智能·fde
IT_陈寒6 小时前
React的状态更新坑得我差点加班到天亮
前端·人工智能·后端
风骏时光牛马6 小时前
深挖底层逻辑:XX源码深度拆解分析
前端