我的問題是我們還沒有在下面的代碼中從類 A 創建一個物件,但是當我們列印this時它如何在 run 方法中回傳一個值?這個物件是什么時候創建的?
class A implements Runnable {
@Override
public void run() {
System.out.println(this); // prints org.ISOFT.A@78a56018
}
}
uj5u.com熱心網友回復:
您不會A使用該代碼創建一個實體,事實上,正如所撰寫的那樣,該代碼本身將編譯但不會列印任何內容并且不會執行任何操作,因為它沒有 main 方法,沒有起點,也沒有創建執行緒。
您只會在何時/何地看到一些東西new A(),然后run()直接呼叫它的方法,或者更常見的是,通過將其傳遞給執行緒來間接呼叫它的方法,例如使用
public class Foo {
public static void main(String[] args) {
new Thread(new A()).start();
}
}
在這里,Thread 物件將從run()Thread 的start()方法中呼叫 A的方法。
或者,
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(new A());
executorService.shutdown();
同樣,您創建一個執行緒,傳入 A,該執行緒run()在啟動時間接呼叫 A 的方法。
因此,要回答您的直接問題:
我的問題是我們還沒有在下面的代碼中從 A 類創建一個物件,
那是對的
但是當我們列印它時,它如何在 run 方法中回傳一個值呢?
它從來沒有真正“回傳一個值”,因為它被宣告為一個空方法,一個不回傳任何內容的方法。并且如上所示,代碼不會列印任何內容(這可能是您所說的“回傳值”的意思),除非實體化 A 物件并將其傳遞到然后啟動的執行緒物件中,如上所示。
這個物件是什么時候創建的?
您發布的代碼中沒有任何內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399886.html
