我想正确理解为什么在编译错误之下? 根据我的理解如果我使用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?提出,但在这个问题中,由于我的问题错误,大多数人都走错了方向,所以我把这个问题提出了新的问题。
答案 0 :(得分:2)
您的假设是错误的:编译器将首先使用签名(方法名称+参数)查找大多数特定候选方法,而不进行装箱。这意味着所选方法是非静态方法。
然后在第二步中,编译器将看到您使用语法static
将该方法称为<Class>.<method>()
方法。
这就是您收到错误的原因。