如果我們創建了Thread對象 - Thread t1 = new Thread();這是否意味着我們已經創建了Thread類的實例,從中我們可以靜態調用方法? (例如sleep())。
當您調用靜態方法時,不會從對象調用它。這就是爲什麼它是靜態的。實例不需要執行靜態方法。
例
Thread t1 = new Thread();
t1.checkAccess(); // <--- This is an instance method.
Thread.activeCount(); // <-- This is a static method.
當看到new
關鍵字,這意味着正在創建一個新對象。在這種情況下,正如你所說的那樣,它是Thread
類的一個實例。
你如何區分他們?
嗯,很簡單。如果是實例方法,則將從對象的上下文中調用它。
String str = new String("hello");
str = str.replaceAll("o", "");
正如你所看到的,你必須創建一個實例使用一個實例方法。
與靜態方法,它更容易。他們將被稱爲除了班級的名字。
String.copyValueOf(new char[] {'a', 'b', 'c'});
有沒有必要創建一個新的String
實例。只需使用班級的名字。
注:正如在評論中指出,一個靜態方法可以從一個實例對象調用,但這不是普遍的做法。如果你不確定,文檔是你最好的朋友。或者您可以簡單地通過嘗試從靜態上下文中調用相同的方法來進行測試。
何時使用靜態方法而不是實例方法?
嗯,這是回答,非常好,在這裏:Java: when to use static methods,我看沒有任何意義的重複吧:)
+1以簡單清晰的方式提出簡單問題。你很驚訝這裏有多少人以複雜的方式提出簡單的問題。 – christopher
我總是非常注意這一點(我家的一半人不是英國人,你有沒有試過告訴一大堆阿拉伯人他們錯了?這是可怕的東西)。然而,這裏有些人是**英語原住民,仍然試圖讓自己聽起來更聰明,或者使問題複雜化,像「XY問題」這樣的問題。我想,雖然我看到一個簡單問題的好例子,但不妨稱讚OP! – christopher