繁体   English   中英

为什么没有调用实现Runnable接口的类的构造函数?

[英]Why is the constructor of a class which implements Runnable Interface not called?

我尝试使用实现Runnable Interface的类的构造函数。 但我很惊讶地发现它从未被调用过。 调用了run()方法,但是从未调用过构造函数。 我写了一个简单的示例代码来显示这种现象。 任何人都可以解释为什么会这样吗?

public class MyRunner implements Runnable {

    public void MyRunner() {
        System.out.print("Hi I am in the constructor of MyRunner");
    }

    @Override
    public void run() {
        System.out.println("I am in the Run method of MyRunner");
    }

    public static void main(String[] args){
        System.out.println("The main thread has started");
        Thread t = new Thread(new MyRunner());
        t.start();
    }
}

public void MyRunner()更改为public MyRunner() (无返回类型)。 public void MyRunner()不是构造函数,它是一个方法。 构造函数声明没有返回类型。

你有一个默认的构造函数,因为你没有定义任何构造函数。 并且,默认的构造函数是在内部调用的。

构造函数不能具有返回类型。 在您的情况下, public void MyRunner() {}是一种方法。 从您的构造函数签名中删除void。

Constructor是一个特殊的方法,它没有return type ,其名称与类名相同,因此从方法名中删除void以使其成为构造函数。

public class MyRunner implements Runnable {

    public MyRunner() {
        System.out.print("Hi I am in the constructor of MyRunner");
    }

    @Override
    public void run() {
        System.out.println("I am in the Run method of MyRunner");
    }

    public static void main(String[] args) {
        System.out.println("The main thread has started");
        Thread t = new Thread(new MyRunner());
        t.start();
    }
}

这将工作,您的构造函数将被调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM