回调(callback)是一种常见的程序设计模式,在java.swing包中有一个timer类,可以使用它在到达时间间隔时发出通告。
在程序设计语言中,可以提供一个函数名,定时器周期性地调用它,在java标准类中的类采用的是面向对象方法,它将某个类的对象传递给定时器,然后,定时器调用 这个对象的方法,由于对象可以携带一些附加的信息,所以传递对象比传递一个函数要灵活得多。java有函数指针的对应物----Method对象。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javaxswing.Timer;
public class TimerTest{
public static void main(String[] args){
ActionLIstener listener=new TimePrinter();
Timer t=new Timer(10000,listener);
t.start();
JOptionPane.showMessageDIalog(null,"Quit program?");
System.exit(0);
}
}
class TimePrinter implement ActionLIstenr
publc void action Performed(actionEvent event){
Date now=new Date();
System.out.println("At the tone ,the time is"+now);
toolkit.getDefaultToolkit().beep();
}
//timerPrinter是timerTest的内部类。
javax.swing.JOptionPane中:static void showMEssageDialog(Component parent.Object message)显示一个包含一条消息和OK按钮的对话框,这个对话框将位于parent组件的中央,如果parent为null。
javjax.swing.timer:timer(int interval,ActionLIstener listener):构造一个定时器,每隔interval毫秒通告listener一次
void start()启动定时器,一旦启动成功,定时器将调用监听器的actionPerformed
void stop();终止定时器,一旦终止成功,定时器将不再调用监听器,actioPErformed
使用内部类有三个原因:一,内部类方法可以访问该类定义所在的作用域的数据,包装私有的数据。
二、内部类可以对同一个包中的其他类隐藏起来。三,当想到定义一个回调函数且不想编写大量的代码时,使用匿名(anonymous)内部类便捷。
嵌套是一种类之间的关系,而不是对象之间的关系。嵌套类有两个好处,命名控制和访问控制。内部类实现的机制就是要做到即使数据域设为公有,仍然不能其他代码所使用。内部类的对象还有一个隐式引用,它引用了,实例化该内部对象的外围类对象。
只有内部类可以是私有类,而常规类只能具有包的可见性,或公有的可见性。一个方法可以引用 调用 这个方法的对象数据域,而内部类既可以访问自身的数据域,也可以访问创建它的外围的对象的数据域。