【问题标题】:Java Runnable QuestionJava 可运行问题
【发布时间】:2010-11-28 22:20:23
【问题描述】:

我目前正在学习 Java 课程,但遇到了一些令人困惑的代码。

例子:

Runnable runnable = new Runnable()
        {
            public void run()
            {
                //doStuff
            }
        };

我真的不明白这段代码在做什么。

run 方法如何与类的实例相关联?

我搜索了“Runnable”,发现它是一个界面。我是否通过在大括号之间声明 run 方法来实现接口? java中的任何接口都可以这样做吗?

我可以使用一些链接/解释。谢谢!

【问题讨论】:

  • +1 用于猜测发生了什么。从你已经知道的逻辑推断是开发的核心技能。

标签: java interface runnable


【解决方案1】:

这是一个实现接口Runnable匿名内部类。是的,您可以通过这种方式实现任何接口,尽管在任何给定情况下您会或不会的原因是有原因的(在“不会”列中,缺乏可重用性是一个很大的问题)。更多关于匿名类here,但它基本上是这样一种方便的形式:

// Define it
class Foo implements Runnable
{
    public void run()
    {
        // Do stuff
    }
}

// And then use it
Runnable runnable = new Foo();

...如果Foo 是一个内部(或“嵌套”)类。更多关于嵌套类here

【讨论】:

    【解决方案2】:

    是的,您正在通过声明运行来实现接口。是的,它可以用于任何界面。

    这通常在您将实现传递给需要接口类型参数的方法时完成,并且您没有适当的声明类。您可以在现场实现接口,然后该代码运行。很整洁。

    【讨论】:

      【解决方案3】:

      我搜索了“Runnable”并发现 它是一个接口。我是吗 通过实现接口 在 curly 之间声明 run 方法 括号?这可以为任何 java中的接口?

      是的!

      此代码正在实例化一个实现 Runnable 的对象。因为我们实际上不能构造一个接口,所以任何试图这样做的代码都必须在大括号中为接口的方法提供实现。我们并没有真正了解 Java 正在创建什么类来实现 Runnable(这些是抽象术语)。

      如果您要执行以下操作:

      Runnable runnable = new Runnable()
              {
                  public void run()
                  {
                      System.out.println("I'm running");
                  }
              };
      runnable.run();
      

      您会看到“我正在跑步”作为您的输出。

      【讨论】:

        【解决方案4】:

        在某些情况下,这个示例代码会很有用....test runna = new test()

        class test implements Runnable{
                test(){
                    Thread t = new Thread(this);
                    t.start();
                }
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    while(true){
                        try {
                            Thread.sleep(3000);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        System.out.print("asd");
                    }
                }
        
            }
        

        【讨论】:

          猜你喜欢
          • 2017-12-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-22
          相关资源
          最近更新 更多