在Java中进行新操作后,代码块会做什么?

One*_*ero 3 java swing

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        Example ex = new Example();
        ex.setVisible(true);
    }
});
Run Code Online (Sandbox Code Playgroud)

这里是一段代码new Runnable().我如何理解这段代码?我不记得我们可以直接将代码块传递给java中的任何对象.

Cod*_*lue 5

它不是代码块.这是一个对象.

当你说,

new Runnable()
Run Code Online (Sandbox Code Playgroud)

您正在创建一个实现Runnable接口的对象,特别是该run()方法.

正如方法名称所示,invokeLater()run()在稍后的某个时间点调用runnable接口实现对象(或Runnable对象)的方法.

正如另一张海报所提到的,这是匿名类的一个例子.这是一种以更简洁的方式快速编写代码的便利机制.如果你不喜欢这样,你可以这样做 -

创建一个实现Runnable的新类 -

public class RunnableImplementation implements Runnable
 {
   public void run() 
    {
        Example ex = new Example();
        ex.setVisible(true);
    }
 }
Run Code Online (Sandbox Code Playgroud)

然后,您的示例中的代码变为 -

SwingUtilities.invokeLater(new RunnableImplementation()); 
Run Code Online (Sandbox Code Playgroud)