Duck d = new Duck();
string[] s = {};
d.main();
当我们尝试使用引用变量而不是类名调用静态方法时,编译器是否会生成错误?
答案 0 :(得分:5)
由JLS定义的合法Java通过引用调用静态方法。但它在许多编码标准中都令人不悦。因此,一些编译器和一些IDE支持为其发出警告。
答案 1 :(得分:1)
这取决于编译器设置。使用eclipse默认设置,它将生成警告,例如。
请尝试使用 编译器设置。
通常,它不会产生错误(由JLS定义)
答案 2 :(得分:1)
如果使用标准编译器,则不会。
但它应该。
你永远不应该以这种方式调用静态方法。这样做绝对没有任何价值,它不是更快或更易读,但它是一个滴答作响的定时炸弹。请考虑以下情况:
class A {
static void bar() {
System.out.println( "A" );
}
}
class B extends A {
static void bar() {
System.out.println( "B" );
}
}
然后在代码中的某处,执行此操作:
A foo = new B();
foo.bar();
现在,这里调用了哪个bar()
方法?
答案 3 :(得分:0)
首先回答你的问题,答案是否定的。显然,你可以使用引用变量代替类名来调用类内部的静态方法,但仅仅因为它合法并不意味着它是好的。虽然它有效,它会产生误导性和可读性较差的代码。当您说 d.main() 时,编译器会自动将其解析回真正的类。