1. 程式人生 > >【Java入門提高篇】Day5 Java中的回調(二)

【Java入門提高篇】Day5 Java中的回調(二)

彈出對話框 java入門 也會 color 編程 args performed show clas

  Java中有很多個Timer,常用的有兩個Timer類,一個java.util包下的Timer,一個是javax.swing包下的Timer,兩個Timer類都有用到回調機制。可以使用它在到達指定時間間隔後發出通知,例如程序中有一個時鐘,就可以每秒請求發送一個通知,以便更新時間顯示。那麽怎樣通知Timer去完成我們的任務呢?在其他語言中,可以提供一個函數名,然後定時器周期性的調用它,但Java使用的是面向對象編程的思想,將某個類的對象傳遞給定時器,然後定時器再調用這個對象的方法,由於對象能攜帶的信息比函數要多,所以這樣也會更加靈活。

  這裏僅僅為了說明回調,僅介紹需要用到的Timer的方法,不會對Timer做過詳細的介紹。

  以swing中的Timer為例,Timer接收的對象必須先實現java.awt.event中的ActionListener接口,下面是接口的原型:

public interface ActionListener{
    void actionPerformed(ActionEvent event);
}

  所以我們先設計一個類來實現這個接口,這裏我們覆蓋這個actionPerformed方法來輸出時間。

public class TimePrinter implements ActionListener {
    @Override
    public
void actionPerformed(ActionEvent e) { Date now = new Date(); System.out.println("Time is " + now + " now."); } }

  然後,我們就可以生成一個TimerPrinter對象來傳入Timer了。

public class Test {
    public static void main(String[] args) {
        ActionListener listener = new TimePrinter();
        Timer t 
= new Timer(1000,listener); t.start(); JOptionPane.showMessageDialog(null,"Quit program?");//彈出對話框,防止主線程結束導致時鐘結束 System.exit(0); } }

  這裏我們使用了一個彈出對話框的語句,不需要深究,只要知道這樣可以阻塞主線程,讓時鐘能繼續運行就OK。以下是運行結果:

Time is Mon Dec 04 00:01:20 CST 2017 now.
Time is Mon Dec 04 00:01:21 CST 2017 now.
Time is Mon Dec 04 00:01:22 CST 2017 now.
Time is Mon Dec 04 00:01:23 CST 2017 now.
Time is Mon Dec 04 00:01:24 CST 2017 now.
Time is Mon Dec 04 00:01:25 CST 2017 now.

  每秒輸出一次,也就是每秒會調用一次TimePrinter的actionPerformed方法,這就是最典型的回調(感覺上一篇的栗子還是講的有點復雜了)。

  其實可以這樣來理解回調,就是我把某個方法的處理權交給你,你可以在合適的時機使用這個方法,那你如何知道該使用哪個方法?這時候就發揮接口的作用了,實現了接口就代表必定存在這個函數,這樣你就可以放心大膽的使用了。

【Java入門提高篇】Day5 Java中的回調(二)