当使用ClassName.staticMethod()时,首先使用Compiler,Static或instance方法查找哪个方法?

时间:2015-03-28 11:23:50

标签: java static compiler-errors

我想正确理解为什么在编译错误之下? 根据我的理解如果我使用Test.xyz()然后编译器只查找静态方法而不是实例方法然后为什么在编译失败?

class Test {
    public static void main(String arg[]) {
        Test.xyz(10);     // compilation fail
    }   

    public void xyz(int i) {
    }
    public static void xyz(Integer i) {
    }   
 }

每个人都请建议为什么编译失败而不是其他建议和如何使用,我知道所有基本的东西Autoboxing等。

这个问题已由我Which method is looked first by Compiler , Static or instance method when ClassName.method() is used?提出,但在这个问题中,由于我的问题错误,大多数人都走错了方向,所以我把这个问题提出了新的问题。

1 个答案:

答案 0 :(得分:2)

您的假设是错误的:编译器将首先使用签名(方法名称+参数)查找大多数特定候选方法,而不进行装箱。这意味着所选方法是非静态方法。

然后在第二步中,编译器将看到您使用语法static将该方法称为<Class>.<method>()方法。

这就是您收到错误的原因。