![](/img/trans.png)
[英]What will be the output of following Java program? And why I am getting error
[英]Why i am getting following output from this java program?
class MyThread extends Thread
{
MyThread()
{
System.out.print(" MyThread");
}
public void run()
{
System.out.print(" bar");
}
public void run(String s)
{
System.out.println(" baz");
}
}
public class TestThreads
{
public static void main (String [] args)
{
Thread t = new MyThread()
{
public void run()
{
System.out.println(" foo");
}
};
t.start();
}
}
您好,我是Java新手,目前正在学习多线程,当我运行上述程序时,我得到了这个特定的输出MyThread foo,请解释为什么?
MyThread来自构造函数
foo来自run
方法,该方法在调用start()
被调用。
本质上, run()
方法(显示baz )在您的main
被覆盖 。
而run(String s)
是一个重载方法,在这里没有意义。
它正在执行MyThread
构造函数,然后执行run()
方法。
Thread t = new MyThread()
,您试图创建MyThread
对象,因此它执行构造函数。
MyThread()
{
System.out.print(" MyThread");
}
然后启动线程t.start();
,它将执行在main(String[] args)
已覆盖的run()
方法:
public void run()
{
System.out.println(" foo");
}
首先,创建MyThread
的实例,该实例调用构造函数并显示“ MyThread”。 然后,您调用t.start();
调用run
方法。
即使您定义了一个run
方法打印“ bar”,它也会被main
方法(打印“ foo”)中的一个覆盖。
请尝试以下操作:
Thread t = new MyThread();
t.start();
看看会发生什么!
原因是,首先在创建对象时调用构造函数MyThread
并打印字符串的第一部分。 当您启动线程时,将继续执行run方法并打印foo
。
MyThread的默认构造函数内部的第一个输出,它将覆盖 run()
方法:
Thread t = new MyThread()
{
public void run()
{
System.out.println(" foo");
}
};
输出:
线程foo
Thread t = new MyThread() ;
输出:
MyThread栏
请注意,第一个覆盖了run()
方法并在其中使用了自定义消息,但是第二个覆盖了MyThread类中的默认run()
。
创建Thread t
时,您将覆盖run
方法。 此新实现将打印“ foo”,它比您在类MyThread中实现的优先级更高,该类仍运行自己的构造函数,该构造函数将打印“ MyThread”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.