[英]What could go wrong with calling a static method with an object in Java?
如果我有以下內容:
class A {
public A() { }
public static void foo() { System.out.println("foo() called"); }
}
public class Main {
public static void main(String [] args) {
A a = new A();
a.foo(); // <-- static call using an instance.
A.foo(); // <-- static call using class
}
}
使用實例調用foo()可能會出現任何問題嗎? JVM是否將第一次調用foo()完全視為靜態方法,還是存在一些技術細微之處?
通過從實例調用靜態方法很容易引入細微的邏輯錯誤。 例如,這不符合您的想法:
Thread t = new Thread(...);
t.sleep(1000);
sleep
是一個靜態方法,它暫停當前正在執行的線程,而不是線程實例。
這兩個電話是一樣的。 想到的問題是當重寫A類時,不能直接覆蓋foo()。
它只是被認為是糟糕的形式/做法。 避免這樣做。
一個很好的理由是,您可能會混淆可能需要閱讀或更新代碼的其他人。 它真的“看起來”像實例化對象應該參與方法調用,而實際上它不是(實際上它可以為null)。 這是不必要的混淆。
不是100%肯定,但如果您的實例為null,則可能會遇到空指針異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.