Этот код создает экземпляр анонимного класса, реализующего 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();
}
}