java中线程构造相关代码,求帮忙解释为何如此运行
{
public void run(){
System.out.println("subthread run");
}
}.start();
运行结果是subthread run,而构造器里也有方法,为何runnable run不输出呢? 展开
如上图运行结果(由于里面有线程 所以建议debug一行一行执行看结果)
第一个Thread 直接start 输出的是runnable run
第二个输出的是subthread run 是因为第二个你在{}里面重写了run方法
可以参看例子
在Main类里面我定义了test方法 输出的是test
我直接new Main().test();输出的是test
我要是
new Main(){
public void test() {
System.out.println("test 重写");
}
}.test();
就重写了test方法 所以就会输出 test 重写
你就是现在thread里面定义了 run 然后又重写了 所以输出的subthread run
我可不可以这样理解:subthread run所在内部类重写的run方法,重写了runnable所在内部类重写的run方法。
还有,这种情况下都是先调用构造方法里的方法的吧,只不过有重写,所以调用了重写。是这样的顺序吗
不是的 你的理解有大问题 还是直接按我说的吧 就不一一指正你的说法了
构造方法是java用于初始化一个类的
Thread是实现Runnable类的 (Runnable是接口 )
new Thread(Runnable runable); 这个构造方法是一个模式 最终调用的是runable实体里面的run方法
new Thread(new Runnable(){....} );这种书写方式 是你使用 new Thread(Runnable runable); 这个构造方法初始化了一个Thread
而你的入参Runnable 是你新建的一个没有名字的Runnable的派生类(子类,实现了Runnable接口),你在这个没有名字的子类里面复写了父类的方法
先说这些 如果你不太能懂的话 你可以先记一下结论 因为从你刚才的提问来看 你的java 基础还有些问题