Java Runnable问题

时间:2010-11-28 22:20:24

标签: java interface runnable

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

示例:

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

我真的不知道这段代码在做什么。

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

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

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

4 个答案:

答案 0 :(得分:8)

这是一个实现接口Runnable匿名内部类。是的,您可以通过这种方式实现任何接口,尽管有理由说明您在任何特定情况下是否愿意(在“不会”列中缺乏可重用性是一个很大的问题)。有关匿名类here的更多信息,但基本是一种方便的形式:

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

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

...提供Foo是一个内部(或“嵌套”)类。有关嵌套类here的更多信息。

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

  

我用谷歌搜索“Runnable”并发现了   它是一个界面。我   通过实现接口   声明卷曲之间的run方法   括号?这可以为任何人做   java中的接口?

是!

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

如果您要执行以下操作:

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

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

答案 3 :(得分:0)

在某些情况下,此示例代码将非常有用...... 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");
            }
        }

    }