我目前正在学习Java课程,但我遇到了一些令人困惑的代码。
示例:
Runnable runnable = new Runnable()
{
public void run()
{
//doStuff
}
};
我真的不知道这段代码在做什么。
如何将run方法与类的实例相关联?
我用Google搜索“Runnable”,发现它是一个界面。我是通过在大括号之间声明run方法来实现接口的吗?这可以在java中的任何接口上完成吗?
我可以使用一些链接/解释。谢谢!
答案 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");
}
}
}