Java 代码中的 }); 是什么鬼?

前几天舍友问到我这个问题,说从网上也搜索过,很多人在问但是没人有人回答,我就来简单地回答一下。其实原理很简单,看完应该都会笑的。

}); 这种东西应该出现在类似这种场景中:

Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("Whatever");
        }
    });

这里最后一行就出现了 }); 字样。

其实上面的代码段,严格来说应该写在同一行,这样这行的写法是为了让内部重写的方法更加清晰。这种写法是利用“匿名内部类”来简写一个对象的声明,实际上如果不怕占内存,完全可以这样写:

// 新建一个 Run 类,实现 Runnable 接口
static class Run implements Runnable {
    @Override
    public void run() {
        System.out.println("Whatever");
    }
}
// 入口方法
public static void main (String[] args) {
    Runnable run = new Run();
    Thread thread = new Thread (run);
}

这样应该就比较清晰明了了。其实就是这样:

  • 新建一个类 Run 实现 Runnable 接口;
  • Run 类里面重写 Runnable 接口中的 run() 方法;
  • 新建一个 Run 类型的对象 run
  • 新建一个 Thread 类型的对象 thread
  • run 作为 Thread() 构造方法的参数传进去。

如果省略掉第一个代码段中重写方法的部分,将第一个代码段简化成:

Thread thread = new Thread( new Runnable() {...} );

是不是结尾出现了 “});” ?其实只是因为这些代码其实都在同一行,所以最终需要一个分号,而相应的括号之是用来和之前的括号相对应的。

发布者:王跃琨

Digital Asshat

“Java 代码中的 }); 是什么鬼?”上的一条回复

  1. 哈哈对的,这个匿名内部类是在初学的时候难以理解的。其实你可以新建类的时候直接implement那个接口,然后在指定接口的时候直接传入this就行,因为这个类已经实现了接口。

评论已关闭。

%d 博主赞过: