在 运行 方法中打印一个实例

printing an instance in run method

我的问题是我们还没有在下面的代码中从 class A 创建一个对象,但是当我们打印时它是如何在 运行 方法中 return 一个值这个?这个对象是什么时候创建的?

class A implements Runnable {
@Override
public void run() {
    System.out.println(this); // prints org.ISOFT.A@78a56018

 } 
}

不要用那个代码创建一个A的实例,事实上,正如所写的那样,代码本身会编译但不会打印任何东西并且什么都不做,因为它没有 main 方法,没有起点,也没有创建线程。

你只会看到你有new A()的东西when/where,然后直接调用它的run()方法,或者更常见,通过将其传递到线程中,例如 with

public class Foo {
    public static void main(String[] args) {
        new Thread(new A()).start();
    }
}

在这里,Thread 对象将从 Thread 的 start() 方法中调用 A 的 run() 方法。

或者,

ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(new A());
executorService.shutdown();

这里又是创建线程,传入A,线程启动时间接调用A的run()方法

所以,回答你的直接问题:

My question is that we have not created an object from class A in the following code yet,

正确

but how does it return a value in the run method when we print this?

它实际上从来没有“return是一个值”,因为它被声明为一个 void 方法,return什么都不是。并且发布的代码不会打印任何内容(这可能是您所说的“return 值”的意思),除非 A 对象被实例化并传递到线程对象中,然后启动该对象,如图所示以上。

When was this object created?

您发布的代码中没有任何地方。