一般匿名内部类的创建方式
以创建线程为例
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " run");
}
}).start();
或
new Thread() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " run");
}
}.start();
使用两个大括号的方式
new Thread() {
{
start();
}
@Override
public void run() {
System.out.println("heo");
}
};
这也能执行start,看一下为什么:
反编译:
class DoubleBrace$1 extends Thread
{
public void run()
{
System.out.println("heo");
}
DoubleBrace$1()
{
start();
}
}
发现另外一个大括号内容是在构造器里面执行的。不过在构造器里面启动线程不安全,不推荐这样创建。
可以像下面创建HashMap:
new HashMap<String, Object>() {
private static final long serialVersionUID = 1L;
{
put("pluginName", 1);
}
};
网友评论