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

Java类中同名静态与非静态方法的调用优先级问题

问题解答

代码示例

public class test2 {

    public static void main(String[] args) {
        A a = new A();
        int y = 5;
        System.out.println(a.foo(y));
    }
}

class A{
    public A() {
        
    }
    public int foo(int x) {
        return x+1;
    }
    public static int foo(int x) {
        return x+2;
    }
}

核心问题解答

  1. 执行的方法:会执行非静态的foo(int x)方法,最终输出结果为6。

  2. 优先执行的原因:

    • Java语法规则中,当通过实例对象调用方法时,编译器会优先匹配非静态实例方法。静态方法属于类本身,规范上应通过类名直接调用;即便语法允许用实例对象调用静态方法,只要存在签名完全一致的实例方法,编译器会优先选择实例方法——因为实例方法与对象实例绑定,调用时会隐含传递this引用,而静态方法不依赖实例,不属于对象的成员。
  3. 是否与定义顺序有关:完全无关。Java对方法的匹配逻辑基于调用方式和方法类型(静态/非静态),和方法在类中的定义先后顺序没有任何关联。哪怕把静态foo方法写在非静态foo之前,通过实例对象调用时,依然会选择非静态方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:10:37