前几天舍友问到我这个问题,说从网上也搜索过,很多人在问但是没人有人回答,我就来简单地回答一下。其实原理很简单,看完应该都会笑的。
});
这种东西应该出现在类似这种场景中:
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() {...} );
是不是结尾出现了 “});
” ?其实只是因为这些代码其实都在同一行,所以最终需要一个分号,而相应的括号之是用来和之前的括号相对应的。
One reply on “Java 代码中的 }); 是什么鬼?”
哈哈对的,这个匿名内部类是在初学的时候难以理解的。其实你可以新建类的时候直接implement那个接口,然后在指定接口的时候直接传入this就行,因为这个类已经实现了接口。
赞赞