这段代码做了什么(曾经见过没有引用变量的对象?如果没有引用变量,稍后如何调用对象?)?

Del*_*ens 0 java events object

EventQueue.invokeLater(new Runnable()
  {
     public void run()
        {
           ZipTestFrame frame = new ZipTestFrame();
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           frame.setVisible(true);
        }
  });
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 9

该代码创建了一个实现runnable的匿名类的实例.该对象作为参数传递给EventQueue.invokeLater,稍后将调用它(意味着它将在稍后的某个时间点调用该对象上的run方法).

您不需要变量来指向该对象,因为您只在该实例中使用该对象.(假定对象被作为参数传递和参数是局部变量)的invokeLater确实有一个局部变量指向对象的方法中,它用来存储在事件队列中,现在还引用该对象的对象,直到从队列中调用并删除对象,此时它可以进行垃圾回收.

附录:

简单事件队列的原始示例:

class MyEventQueue {
    Queue<Runnable> queue = new LinkedList<Runnable>();
    public void invokeLater(Runnable r) {
        queue.add(r);
    }
    public boolean hasNext() {
        return !queue.isEmpty();
    }
    public void processNext() {
        queue.poll.run();
    }
}
Run Code Online (Sandbox Code Playgroud)