java中线程构造相关代码,求帮忙解释为何如此运行

newThread(newRunnable(){publicvoidrun(){System.out.println("runnablerun");}}){publicv... new Thread(new Runnable(){public void run(){System.out.println("runnable run");}})
{
public void run(){
System.out.println("subthread run");
}
}.start();
运行结果是subthread run,而构造器里也有方法,为何runnable run不输出呢?
展开
 我来答
y6198078
2016-12-09 · 超过20用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:35.4万
展开全部

如上图运行结果(由于里面有线程  所以建议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方法。
还有,这种情况下都是先调用构造方法里的方法的吧,只不过有重写,所以调用了重写。是这样的顺序吗
追答

不是的  你的理解有大问题    还是直接按我说的吧  就不一一指正你的说法了

  1. 构造方法是java用于初始化一个类的

  2. Thread是实现Runnable类的 (Runnable是接口  )

  3. new Thread(Runnable runable); 这个构造方法是一个模式  最终调用的是runable实体里面的run方法

  4. new Thread(new Runnable(){....} );这种书写方式 是你使用 new Thread(Runnable runable); 这个构造方法初始化了一个Thread

    而你的入参Runnable 是你新建的一个没有名字的Runnable的派生类(子类,实现了Runnable接口),你在这个没有名字的子类里面复写了父类的方法


  5. 先说这些   如果你不太能懂的话  你可以先记一下结论  因为从你刚才的提问来看 你的java 基础还有些问题

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式