2012-01-17 60 views
2

我是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()); 
    } 
} 

回答

7

这条线:

{setName("DemoThread");} 

称为初始化块(或实例初始化块)。它看起来像一个静态初始化块,但没有关键字static。这对于匿名类非常有用,因为它们不能命名构造函数。更多细节可以在here找到。

1

的代码创建与

new Thread("main") { 

}; 

在该匿名类匿名Thread子类,有一个初始化块:

{setName("DemoThread");} 
2
Thread t = new Thread("main") { 
    { 
     setName("DemoThread"); 
    } 
}; 

上面正在创建匿名内部类。 {}是Java中的一个实例初始化程序块。这将是一个静态块,如果它有static { }

基本上,您可以从属于实例(this)引用的实例初始化程序块调用任何操作。

在这种情况下,它在Thread的当前实例上调用setName