我是Java的新手。任何人都可以解释主方法中发生了什么吗?
class Demo {
public static void main(String []args) {
//setting a name using the constructor
Thread t=new Thread("main"){
//what is this? a static block?? need an explanation to this.
{setName("DemoThread");}
};
//output is DemoThread. Since it set the name again.
System.out.println(t.getName());
}
}
答案 0 :(得分:7)
这一行:
{setName("DemoThread");}
称为初始化块(或实例初始化块)。它看起来像一个静态初始化程序块,但没有static
关键字。它对匿名类很有用,因为它们不能有命名构造函数。可以找到更多详细信息here。
答案 1 :(得分:2)
Thread t = new Thread("main") {
{
setName("DemoThread");
}
};
以上是正在创建的匿名内部类。 {}
是Java中的实例初始化程序块。如果它有static { }
,它将是一个静态块。
基本上,您可以从属于实例(this
)引用的实例初始化程序块调用任何操作。
在这种情况下,它会在setName
的当前实例上调用Thread
。
答案 2 :(得分:1)
代码正在创建一个带有
的匿名Thread子类new Thread("main") {
};
在这个匿名类中,有一个初始化块:
{setName("DemoThread");}